zoukankan      html  css  js  c++  java
  • 我对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/"
         }
  • 相关阅读:
    JS ipad图片拖动缩放 PHP
    PHP 格式化输出 PHP
    PHP Smarty模版使用 PHP
    PHP PDO小试 PHP
    PHP 获取网页所有连接 PHP
    C# 生成不重复随机字符串 (1秒内生成1000000个) PHP
    使用VS 开发PHP PHP
    PHP 扑捉未处理异常 PHP
    PHP 格式化MYSQL返回float类型 PHP
    CheckBox 选中判断及实现单选功能
  • 原文地址:https://www.cnblogs.com/3tree/p/4348977.html
Copyright © 2011-2022 走看看