私はレスポンシブ Web フレームワークを構築しています。アーキテクチャはすべて Backbone.js に基づいています。最終的にはオープン ソースになり、外部の開発者がモデルのメソッドを変更および編集できるようにする計画です。暫定的なプラグインを作成しているときに、メソッドがオーバーライドされていないことに気付きました。
デバッグ後、これは、モデル プロパティをコレクションに設定するときに、コンストラクタへのポインタではなく、コレクションが定義された時点でコンストラクタへの直接参照であったことが原因であることに気付きました。これまでのところ、モデルが拡張された直後にコレクションのモデル属性を (以前とまったく同じデータで) 拡張することで、これにパッチを当てることができました。これは Backbone 内の一般的な欠陥のように思えます。または、私の使い方が間違っているのでしょうか。
var MyModel = Backbone.Model.extend({
initialize: function() {
this.set("type", "original");
}
})
var MyCollection = Backbone.Collection.extend({
model: MyModel
})
MyModel = MyModel.extend({
initialize: function() {
this.set("type", "modified");
}
})
var test = new MyCollection();
test.add({type:null})
test.at(0).get("type") // original
MyCollection = MyCollection.extend({
model: MyModel
})
var test2 = new MyCollection();
test2.add({type:null})
test2.at(0).get("type") // modified
外部の開発者が、上書きしたモデルのタイプを保持するコレクションのモデル属性を再定義するのは、ちょっと間違っている/不必要に思えます。
任意のアイデアや回避策をいただければ幸いです。それともこれは本物の欠陥ですか?jsfiddle http://jsfiddle.net/S4pcW/1/を含めました。これは単なるコードであるため、どれだけの助けになるかわかりませんが、backbonejs.org で chrome 開発者ツールにコピーして貼り付けると、私が何を意味するかを見るべきです。
事前に感謝します。どんなアイデアでも大歓迎です。