• 我对Backbone中url属性的理解


    Model中有一个url属性,而且有一个urlRoot属性。

    Collection中也有一个url属性。

      // 这是Model中的url方法
      url: function() {
         var base =
           _.result(this, 'urlRoot') ||
           _.result(this.collection, 'url') ||
           urlError();
         if (this.isNew()) return base;
         return base.replace(/([^/])$/, '$1/') + encodeURIComponent(this.id);
       }
    

    从以上代码可以看出以下几点:

    1. url默认是一个函数,它的返回值是字符串。
    2. 它使用urlRoot和id来拼接真实url。
    3. 如果urlRoot属性不存在,则使用该Model所属的Collection的url属性替代。所以表现出Model可以继承了Collection中的url属性。
    4. 上面说的都是使用默认url的情况下,如果我们重写了url属性,比如直接写一个字符串代表真实url。那么就不会和id进行拼接了,当然也不会继承Collection中的url了。
    5. 需要重点关注一下_.result()方法,这个方法可以得到对象的某个属性值,如果该属性值是一个函数,那么就执行该函数,然后再返回。
    6. 所以呢,url,urlRoot都是可以重写为函数的。

    下面我修改了Backbone.sync方法,主要目的是使用我自己的url,这也是因为后端的API不支持REST接口。

      // 这是Backbone.sync方法中的获得url的代码片段
      if (!options.url) {
         params.url = _.result(model, 'url') || urlError();
       }
    
      // 现在修改为:其实就是给Model增加了一个urls属性,该属性是一个对象,保存了相应的url,只不过其中的key是相应的method.
      if (!options.url) {
         params.url = (model.urls && model.urls[method]) || _.result(model, 'url') || urlError();
       }
    
      // 这是urls属性的例子
      urls: {
       "create": "json/lxr/create",
       "update": "json/lxr/update",
       "delete": "json/lxr/delete",
       "read": "json/lxr/read/"
         }
  • 相关阅读:
    flask框架中SQLAlchemy相关
    flask使用外部存储模块之数据库的使用
    flask的基础知识
    docker的下载和使用
    rbac权限管理系统的学习
    redis数据库之五种数据类型的简单操作
    使用django框架进行web项目开发需要了解的知识
    django项目常用外部模块下载和使用
    pwn学习之dl_resolve学习篇
    验证docker的Redis镜像也存在未授权访问漏洞
  • 原文地址:https://www.cnblogs.com/3tree/p/4348977.html
Copyright © 2020-2023  润新知