0

プロトタイプを使用して、モデルのすべてのインスタンスにコンストラクターをアタッチするにはどうすればよいですか?Backbone.Modelのインスタンスが作成されるときに、コンストラクターメソッドを変更しようとしています。ただし、個別に作成する各モデルにコンストラクターメソッドをアタッチしたくありません。初期化作業のプロトタイプを追加します。唯一の問題は、初期化がモデルとともに渡された場合、アンダースコア拡張メソッドを介してモデルをオーバーライドすることです。

私はこれを試しました

Backbone.Model.prototype.constructor = function(attributes, opts) {
        console.log('hi');
        Backbone.Model.prototype.constructor.call(this, attributes);
};

唯一の問題は、拡張の外では機能しないことです。新しいインスタンスを作成するときにモデルを拡張するオブジェクト内にコンストラクターがある場合にのみ呼び出されます。

各モデルのインスタンスが作成されるときに、いくつかのコードを実行する必要があります。ノードのsocket.ioフレームワークを使用して自動バインディング作業を実行したいと思います。

4

1 に答える 1

1

バックボーン継承の内部をいじり、提供されたメソッドとフローを使用して、初期化時にモデル操作を実行することはお勧めしません。これを行うには、コレクション、ビュー、またはルーターの場合と同様に、コンストラクターの役割を果たす初期化メソッドをオーバーライドする必要があります。

すべてのモデルを変更する必要がある場合は、後ですべてのモデルのスーパークラスとして使用する新しい基本クラスを作成し、サブクラスの初期化メソッドを上書きする必要がある場合は、組み込みを使用してスーパークラス初期化子を呼び出します。バックボーンクラスの__super__プロパティ。

initialize: function() {
    this.constructor.__super__.initialize.call(this);
    // whatever
},

バックボーンのコアを変更すると、競合する変更が発生した場合に新しいバージョンに簡単に更新できなくなるため、長期的には効果がありません。

私はそこに行ってそれをしました-そしてそれをした後、私は誰にもこの道をたどらないことをお勧めします!

于 2012-10-24T11:17:40.257 に答える