9

私の理解では、バックボーン JS モデルのデフォルトの動作は、モデルに指定がない限りurlRoot、コレクションの URL を返すことです。動作を機能させることができないようです。

ドキュメントから:

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は/theurl/param/{MODEL-ID}.

私が見逃している/誤解していることについてのアイデアはありますか?

...

PS:model: Modelコレクションの は RequireJS 経由で取り込まれます

4

3 に答える 3

9

指定した場合でも、コレクションの URL が常に使用urlRootされます。

その理由urlRootは、オーバーライドで使用できるようにするため、またはモデルがたまたまコレクションに含まれていない場合 (たとえば、削除されてもクライアントにまだ存在する場合) です。

したがって、コレクションによって生成された URL をモデルおよびオーバーライドするfetch場合は、オプションとしてこれらのメソッドに明示的saveに渡す必要があります。urlRoot例えば:

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

ドキュメントが紛らわしいことに同意しますが、これも最近私を捕まえました。

于 2013-07-04T04:16:03.853 に答える