2011-09-30 13 views
4

モデルのすべてのセットで余分な属性を計算するためにsetメソッドを変更したバックボーンモデルがあります。Backbone.js Collection.createとOverrided Model.set

ドキュメントによると、これはモデルを実際に保存するためにsuperを呼び出す方法です。

Backbone.Model.prototype.set.call(this, attributes, options); 

Collection.createを使用しない限り、期待どおりに動作します。

私のカスタム設定メソッドが実行されますが、コレクションが空のままであるため、オリジナルは使用しないと思います。 サーバーは正しいデータを受信し、正しいデータを戻します。どちらの場合でも、私のメソッドは実行されますが、コレクションはまだ空です。

スーパーコールをCollection.createと連携させるように変更することはできますか?同じことを行う別の方法はありますか?

+0

は、例外は、おそらく、道に沿って投げされていますか?あなたのコンソールをチェックして、そうでないことを確認しましたか? –

+0

何も例外ではありません。それが簡単になりましたが、悲しいことにそれはただ静かに失敗します。 –

答えて

14

私が思ったように、私は何かを逃した。 Model.set()をオーバーライドするときは、最後にreturn this;を入れなければなりません。

ので、モデルは次のようになります。

var MyModel = Backbone.Model.extend({ 
    set: function(attributes, options) { 
     // Custom code... 
     return Backbone.Model.prototype.set.call(this, attributes, options); 
    } 
}); 
+4

実際には、単に "super"の結果を返します。なぜなら、あなたは本当にそれをオーバーライドしているだけなので、 'return Backbone.Model.prototype.set。 ' –

+4

これを返すと、Backbone.Model setメソッドを呼び出す代わりに、そのモデルのために検証が機能しなくなります。検証中にエラーが発生した場合にどうなるべきか、falseを返すことはありません。 –

1

私は、デバッガを開けてそれを実行することをお勧めします。 Collection.create関数とModel.save関数を見てください。 create関数はModel.savesuccessコールバックを呼び出します。 Model.saveはデータをサーバーに送信し、Model.setがコールされるsuccessコールバックにもチェーンします。

これらの関数の両方のコールバックにブレークポイントを設定すると、非常に単純なので、問題を指摘する可能性があります。

最後に、jsFiddleで問題を再現できる場合は、問題の完全なコンテキストを理解するのに役立ちます。

+1

ありがとうございました。私はあなたのアドバイスに従ってそれを見つけました。 JSデバッグで自分のスキルを磨くためには、明らかにそれが必要でした:) –