2012-02-29 21 views
3

私のモデルとコレクションは次のようになります。バックボーンモデルでカスタムメソッドを呼び出せません

var MyModel= Backbone.Model.Extend({ 

    foo: function(){ 
     alert("is not working..."); 
    } 
}); 

var MyCol = Backbone.Collection.extend({ 

    models:MyModel, 
    url: function(){ return '/json_from_server' }, //json data mapped to MyModel 
    poo:function(){ 
     alert("this works"); 
    } 
}); 

cols = new MyCol(); 

cols.fetch({ 

    success:function() { 
    cols.poo(); //this works fine 
     cols.models.forEach(function(item){ 
      alert(item.get("id")); //It works fine 
      alert(item.foo()); // this is not working... 
     });  
    } 
}); 

item.fooを呼び出す()、ブラウザはエラーをスローします。キャッチされない例外TypeErrorを:オブジェクト[オブジェクトのオブジェクト]は何のメソッド「foo」で を持っていない、誰もがここで間違って何が起こっているのかを把握するために私を助けることができます。

答えて

5

、あなたはmodels: MyModelを設定します。私はモデルが複数であるべきではないと信じているので、それはmodel: MyModelでなければなりません。

それはまだ動作しない場合は、あなたがそうのようなあなたに、mymodelで_.bindAllが必要になる場合があります。

var MyModel= Backbone.Model.Extend({ 
    initialize: function() { 
     _.bindAll(this, "foo"); 
    }, 
    foo: function(){ 
     alert("is not working..."); 
    } 
}); 

前述したように、あなたの初期化が機能しなかった理由は、以前の理由は、あなたが「持っていました。 「モデル」は複数の場合はmodelでなければなりません。

+0

ありがとうございました。 – bhochhi

4

bindAllを初期化に追加すると修正されるはずです。あなたのMyColオブジェクトで

var MyModel= Backbone.Model.Extend({ 
    initialize: function() { 
     _.bindAll(this); 
    }, 
    foo: function(){ 
     alert("is not working..."); 
    } 
}); 
+1

まだ動作しませんでした。私が気付いたことの1つは、コレクションを取得したときにinitializeメソッドが呼び出されていないことです(これは私が想定したものです)。私は、colsがモデルで構成されていることを発見しましたが、モデルの 'initialize'は呼び出されません。なぜだろう? – bhochhi

+1

私はモデルオブジェクトを外部に作成しました:var mod = new MyModel(); mod.foo();これは_bindAll(this)を使わなくても動作します。私は、コレクションを取り出すときになぜ機能しないのか分かりません。 – bhochhi

+1

フェッチを使用していくつかの問題があると思います。代わりに、私は以下を使用し、それは動作します。もし誰かがまだフェッチを使って解決策を持っていれば、私は感謝します。 $ .getJSON( '// json_from_server'、機能(データ){ 場合(データ){ するvar COLS =新しいMyCol(); _(データ).MAP(関数(I){ cols.add(新しいMyModel(i)); }); } }); – bhochhi

関連する問題