Backbonejs Model.url需要吗?

时间:2015-08-03 13:25:41

标签: rest backbone.js marionette

我有一个示例设置来显示我的问题:http://themify.me/themes/basic

\d{1,3}\s<altern>?\s?(\bof\b)?

此示例有效,即两个console.log都在执行时没有var root = "http://jsonplaceholder.typicode.com" var Post = Backbone.Model.extend({ url: function(){ return this.get('url') || root + "/posts/" + this.get('id') } }); var Posts = Backbone.Collection.extend({ model: Post, url: root + "/posts" }); var posts = new Posts(); posts.fetch(); console.log("Call to collection fetch works") var post = new Post({id: 1}); post.fetch(); console.log("Call to collection fetch works") 引发异常。但是,根据http://jsfiddle.net/5xo4yzw2/1/和我正在阅读的书,我的理解是,一旦我将.fetch()指定为集合网址,模型网址就会自动解析为"/posts"。事实并非如此。如果我没有在模型中提供url函数,则在获取时会引发异常,说明必须提供th url参数。

我误解了什么吗?

2 个答案:

答案 0 :(得分:2)

您尚未将帖子模型添加到您的集合中,为了让模型使用集合URL,它必须是该集合的一部分。

例如

var post = new Post({id: 1});
posts.add(post);
post.fetch();
console.log("Call to collection fetch works")

Updated Fiddle

正如@Artem Baranovskii指出的那样,如果要在集合外部使用模型,则应使用urlRoot属性。来自documentation

  

如果您正在使用集合之外的模型,请指定urlRoot   启用默认网址功能以根据模型生成网址   ID。 &#34; [urlRoot] / ID&#34;通常,您不需要定义它。注意   urlRoot也可能是一个函数。

答案 1 :(得分:1)

如果您在集合之外使用模型,则可以使用urlRoot,如下所示:

var root = "http://jsonplaceholder.typicode.com"

var Posts = Backbone.Model.extend({
    urlRoot: function () {
       return this.get('url') || (root + "/posts/" + this.get('id'))
   }
});

var posts = new Posts();
posts.fetch();

console.log("Call to collection fetch works")

当您执行fetch时,模型会尝试按以下几种方法获取网址here