モデルはビューの存在を認識してはならないため、ビューはモデルに対して次のid
ようにフェッチする必要があります。
MyView = Backbone.View.extends({
initialize: function()
{
myModel.id = this.model.id;
myModel.fetch();
}
});
(私はあなたのサンプルコードを私の例のテンプレートとして使用しましたが、いくつか奇妙なことを感じていると言わざるを得ません。それは単なる好みの問題だと思います)
更新:私の非常に個人的な好みの意見
これを行うのは非常に困難ですが、ご要望に応じて、サンプル コードの非常に個人的なコード レビューを共有します。これをそのまま受け取ってください。非常に謙虚な意見です。
this.model 混乱
混乱を招く可能性のある属性名は使用しません。
var myView = new MyView({
model: {id: 12321}
});
このインスタンスでは、生のthis.model
Hashを参照していますが、Backbone のコンテキストでは、これがBackbone.Modelになるという直感的な感覚に反しています。
私はむしろ次のように変更します:
var MyView = Backbone.View.extend({
initialize: function( opts ){
this.model_id = opts.model_id;
}
})
var myView = new MyView({ model_id: 12321 });
このネーミングの方が直感的だと思います。
変数スコープを閉じる
このコードは、本来よりも大きなスコープ内にある場合にのみ機能myModel
します。
MyView = Backbone.View.extends({
initialize: function()
{
myModel.fetch();
}
});
ビューの外側のコンテキストで宣言されている場合でもmyModel
、ビューはそのプライベートコンテキストの変数を使用する必要があります。例えば
var MyView = Backbone.View.extends({
initialize: function( opts ) {
this.model = opts.model;
this.model.fetch();
}
});
var myView = new MyView({ model: myModel });
そうでない場合はグローバル変数になるためvar
、前に追加した詳細を確認してください。MyView
MyView
window
バックボーン urlRoot を使用する
あなたの例では、これは...
MyModel = Backbone.Model.extends({
url: function url ()
{
// how to get the id passed to view instance?
return "http:..../id/" + this.id;
}
});
...次のように要約できます。
MyModel = Backbone.Model.extends({
urlRoot: "http:..../id"
});