BackboneJS model.url using collection.url



根据我的理解,Backbone JS模型的默认行为是返回集合的URL,,除非模型指定了urlRoot。我似乎无法让这种行为发挥作用。

来自文件:

model.url()…默认情况下生成形式为"[collection.url]/[id]"的url,但如果不应考虑模型的集合,则可以通过指定显式urlRoot来覆盖。

这是我的收藏,和模型分别是:

var MyCollection = Backbone.Collection.extend({
    model: Model,
    initialize: function(options){
        this.options = options || {};
    },
    url: function(){
        return "/theurl/" + this.options.param;
    }
});
return MyCollection;

var MyModel = Backbone.Model.extend({
    urlRoot: '/theurl',
    initialize: function() {
    }
});
return MyModel;

当一个模型在没有集合的情况下加载时,它工作得很好,并提交给/theurl,但当它加载到集合中时,所有方法都提交给/theurl/param/

如果我正确理解了文档,那么模型的urlRoot应该覆盖这种行为;并且即使在那时模型url也应该是CCD_ 5。

有什么我遗漏/误解的想法吗?

PS:集合中的model: Model是通过RequireJS 引入的

即使指定了urlRoot,它也将始终使用集合的url。

urlRoot的原因是,您可以在重写中使用它,或者如果模型恰好不在集合中(例如,它可能被删除,但仍然存在于客户端上)。

因此,如果要fetchsave模型并覆盖集合生成的url,则需要将urlRoot作为选项显式传递到这些方法中。例如:

yourModel.save({ url: yourModel.urlRoot });

我同意文档令人困惑,这也让我最近陷入了困境。

UrlRoot应该是一个函数,并且模型必须定义attributeId。若您像这样定义您的模型,那个么无论模型是否在集合中,所有操作都将起作用。

Backbone在urlRoot函数返回的URL末尾添加modelId

var MyModel = Backbone.Model.extend({
    attributeId: 'myModelId'
    urlRoot: function() {
        return '/theurl';
    },
    initialize: function() {
    }
    defaults: {
        myModelId: null
    }
});

在模型中,尝试使用:

url: function() {
    return 'your url goes here';
}

最新更新