我有一个示例设置来显示我的问题: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参数。
我误解了什么吗?
答案 0 :(得分:2)
您尚未将帖子模型添加到您的集合中,为了让模型使用集合URL,它必须是该集合的一部分。
例如
var post = new Post({id: 1});
posts.add(post);
post.fetch();
console.log("Call to collection fetch works")
正如@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