0

fetch特定の ID を持つデータと
、ビュー インスタンスで定義されている ID が必要です。
この例では、MyModel 定義のコメントを参照してください。

// my view instance
var myView = new MyView({
    model: {id: 12321}
});

MyView = Backbone.View.extends({
        initialize: function()
        { 
            myModel.fetch();
        }
});

MyModel = Backbone.Model.extends({
        url: function url ()  
        {
          // how to get the id passed to view instance?
          return "http:..../id/" + this.id; 
        }
});
4

1 に答える 1

3

モデルはビューの存在を認識してはならないため、ビューはモデルに対して次のidようにフェッチする必要があります。

MyView = Backbone.View.extends({
        initialize: function()
        { 
            myModel.id = this.model.id;
            myModel.fetch();
        }
});

(私はあなたのサンプルコードを私の例のテンプレートとして使用しましたが、いくつか奇妙なことを感じていると言わざるを得ません。それは単なる好みの問題だと思います)

更新:私の非常に個人的な好みの意見

これを行うのは非常に困難ですが、ご要望に応じて、サンプル コードの非常に個人的なコード レビューを共有します。これをそのまま受け取ってください。非常に謙虚な意見です。

this.model 混乱

混乱を招く可能性のある属性名は使用しません。

var myView = new MyView({
    model: {id: 12321}
});

このインスタンスでは、生のthis.modelHashを参照していますが、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、前に追加した詳細を確認してください。MyViewMyViewwindow

バックボーン 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"
});
于 2012-05-13T08:42:50.063 に答える