Rest 是否需要Backbonejs Model.url?

Rest 是否需要Backbonejs Model.url?,rest,backbone.js,marionette,Rest,Backbone.js,Marionette,我有一个示例设置来显示我的问题: 此示例有效,即执行两个console.log时,.fetch()不会引发异常。然而,根据我和我正在阅读的书中的理解,一旦我指定“/posts”作为集合url,模型url应该自动解析为[collection.url]/[id],尽管事实并非如此。如果我没有在模型中提供url函数,则在获取时会引发异常,说明必须提供th url参数 我误解了什么吗?您没有将您的帖子模型添加到收藏中,为了让模型使用收藏URL,它必须是该收藏的一部分 比如说 var post = new

我有一个示例设置来显示我的问题:

此示例有效,即执行两个console.log时,
.fetch()
不会引发异常。然而,根据我和我正在阅读的书中的理解,一旦我指定
“/posts”
作为集合url,模型url应该自动解析为
[collection.url]/[id]
,尽管事实并非如此。如果我没有在模型中提供url函数,则在获取时会引发异常,说明必须提供th url参数

我误解了什么吗?

您没有将您的帖子模型添加到收藏中,为了让模型使用收藏URL,它必须是该收藏的一部分

比如说

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

如前所述,如果要在集合外部使用模型,则应使用urlRoot属性。从

如果使用集合外部的模型,请指定urlRoot,以 启用默认url函数以根据模型生成url id.“[urlRoot]/id”通常,您不需要定义它。注意 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
时,模型尝试通过几种方法获取url

因此,如果我只需要一个模型,我需要一个空集合,我可以将其添加到其中,然后进行fetch?我认为这是有道理的,尽管我的观点并不直观。正如@Artem在他的回答中指出的那样,您可以使用urlroot属性来实现这一点。只是为了确保:集合引用我的restful服务的端点,它返回一个对象数组(/posts)。模型是该集合中单个对象的表示形式。有时我想检索整个集合,有时我只想检索其中一个对象。在这种情况下,我还应该使用urlRoot吗?这对我来说似乎很奇怪,如果应用程序中的上下文发生了变化,那么我可能会将模型添加到集合中,而不使用urlRoot,当您只需要单一模式调用它的fetch时。我认为在模型概念上不属于集合的情况下,使用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")