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/"
         }
  • 相关阅读:
    VirtualBox 命令行操作
    [大数据入门]实战练习 安装Cloudera-Hadoop集群
    DB2 Package Issues and Solution
    关于《阿里巴巴Java开发规约》插件的安装与使用
    Spring学习笔记:Spring概述,第一个IoC依赖注入案例
    SpringMVC:系统认识一下maven
    利用JS提交表单的几种方法和验证(必看篇)
    a标签调用js的几种方法
    使用BigDecimal进行精确运算
    Maven中settings.xml的配置项说明
  • 原文地址:https://www.cnblogs.com/3tree/p/4348977.html
Copyright © 2011-2022 走看看