骨干模型urlRoot分享api的中间部分

时间:2014-12-18 19:50:12

标签: backbone.js

我想获取api,格式类似于apps/[:id]/result

对于大多数示例或documentation有关设置,urlRoot基于具有相同的根网址。

但我的问题是api共享相同的根和api名称的结尾。

我尝试使用下面的代码,但它不起作用。

var Model = Backbone.Model.extend({
    urlRoot: "/apps"
})

var model = new Model({id: 123123 + "/content"]}) //123123 just fake id 

是否只能更改ID的middle

或者在这种情况下,使用urlRoot是不合适的?

1 个答案:

答案 0 :(得分:1)

Backbone的持久性方法是围绕urlurlRoot构建的,专为RESTful持久性而设计。每种方法都旨在使用明确定义的语义与服务器通信(GET /path表示列表,PUT /path/:id表示更新等)。

Chaning id的含义是一个坏主意,因为你离开了那些语义,意味着a)你的模型不能用于创建,更新或删除REST操作,以及b)你的代码将变得困难理解,因为id将不再是描述性变量名称。 Backbone在模型和集合中频繁使用id,因此更改其含义是一个非常糟糕的主意。

如果您没有使用REST API,或者您的特定操作不适合该范例(如搜索),则最好实现自己的方法来生成自定义HTTP请求。

在你的情况下,这样的事情应该像你期望的那样工作:

var Model = Backbone.Model.extend({
  urlRoot: "/apps",
  fetchResult: function() {
    return $.ajax({
      url: this.url() + '/result'
    }).then(function(response) {
       // do something with response
       // return response, or the result of your processing,
       //  for downstream promise handlers
       return response;
    }, function() {
      console.error('fetchResult failed');
    })
  },

})

使用这种方法,RESTful URL按设计工作,您不会丢失id的语义。