「スーパー」メソッドをオーバーライドして問題に遭遇するまで、私は近くのPrivmanの答えを好みました。 initialize()
は、何らかの方法でBackboneオブジェクトを構築するまで呼び出されていないため、必要なときにオーバーライドが発生していない可能性があります(initialize()
が呼び出される前に必要です)。
特に、これはparse()
の問題である可能性があります。 (未ビューの問題、間違いなくコレクションとモデルのため。)この設定を考える:
MyModel = Backbone.Model.extend({
initialize: function (options) {
this.parse = function (response, xhr) {
// parsing logic
};
// public & private vars/methods here
// and also initialize code
}
});
MySubModel = MyModel.extend({
initialize: function (options) {
this.parse = function (response, xhr) {
// override MyModel with my own parsing logic
}
// public & private vars/methods here
// and initialize code here
}
});
MySubModel.parse()
が呼び出されることはありません。
代わりに、initialize()の代わりにIIFEを使用すると、この問題が解決され、すでに指定された目的(initialize()
)を持つ関数を他のものを定義するクロージャクラスの
var MyModel = {};
(function() {
this.initialize = function (attributes, options) {
// initialize me
}
this.parse = function (response, xhr) {
// override at will
}
// other public & private vars/methods here
}).call(MyModel);
Backbone.Model.extend(MyModel);
残念ながら、これはgilly3と近くPrivmanの答えの両方がそうであるように、クラスのすべてのインスタンス間で共有されている「プライベート」の変数と同じ問題を抱えています。プライベート変数を可能にするために厄介ではない方法を聞くのが大好きですが、多分私はそれをあきらめて、Java/AS3/C++ではなくJavaScriptを書いていることを認識する必要があります。
なぜあなたは説明してもらえこれをやろうとしている?実際にはまっすぐな解決策はありません。 – Gazler
私はどのようにビューにプライベートプロパティを追加することができますからappartを説明することはあまりありません。 var myPrivate = "private property"の例ですが、これはthis.myPublicのようにビュー全体で使用できるはずです。ただし、this.myPublicはビューインスタンスからアクセスできます。 myPrivateはビューメソッド自体からのみアクセスできます – Chapsterj
この回答を見る http:// stackoverflow。com/questions/8924961/private-like-properties-in-models-or-views-of-backbone-js –