需要 Backbonejs Model.url?
Backbonejs Model.url required?
我有一个示例设置来说明我的问题:http://jsfiddle.net/5xo4yzw2/1/
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")
这个例子有效,也就是说,console.logs 都被执行了,.fetch()
没有引发异常。然而,根据 http://backbonejs.org/#Model-url 和我正在阅读的书,我的理解是,一旦我将 "/posts"
指定为集合 url,模型 url 应该会自动解析[collection.url]/[id]
,尽管事实并非如此。如果我没有在模型中提供 url 函数,则在获取时会引发异常,说明必须提供第 url 参数。
我是不是误会了什么?
您尚未将 post 模型添加到 collection,以便模型使用 collections URL 它必须是 collection 的一部分。
例如
var post = new Post({id: 1});
posts.add(post);
post.fetch();
console.log("Call to collection fetch works")
作为@Artem Baranovskii pointed out, If you want to use a model outside a collection you should be using the urlRoot property. From the documentation
Specify a urlRoot if you're using a model outside of a collection, to
enable the default url function to generate URLs based on the model
id. "[urlRoot]/id" Normally, you won't need to define this. Note that
urlRoot may also be a function.
如果您使用的是系列之外的模型,您可以像下面这样使用 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
获得 url
我有一个示例设置来说明我的问题:http://jsfiddle.net/5xo4yzw2/1/
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")
这个例子有效,也就是说,console.logs 都被执行了,.fetch()
没有引发异常。然而,根据 http://backbonejs.org/#Model-url 和我正在阅读的书,我的理解是,一旦我将 "/posts"
指定为集合 url,模型 url 应该会自动解析[collection.url]/[id]
,尽管事实并非如此。如果我没有在模型中提供 url 函数,则在获取时会引发异常,说明必须提供第 url 参数。
我是不是误会了什么?
您尚未将 post 模型添加到 collection,以便模型使用 collections URL 它必须是 collection 的一部分。
例如
var post = new Post({id: 1});
posts.add(post);
post.fetch();
console.log("Call to collection fetch works")
作为@Artem Baranovskii pointed out, If you want to use a model outside a collection you should be using the urlRoot property. From the documentation
Specify a urlRoot if you're using a model outside of a collection, to enable the default url function to generate URLs based on the model id. "[urlRoot]/id" Normally, you won't need to define this. Note that urlRoot may also be a function.
如果您使用的是系列之外的模型,您可以像下面这样使用 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