0

私は自分のウェブサイトで使用するいくつかのノックアウト モデルを持っています。特定のモデルについて、プロパティがあるとしましょう

function modelA {
    this.doSomething = function () { ... };
}

今、別のモデルで doSomething() 関数を使用したいと考えています。doSomething() を必要とするすべてのモデルで doSomething() を書き直す義務がないように、これを行いたいと思います。理想的には、ko.applyBindings(new modelX()) が呼び出されるとすぐにこの関数が使用可能になるといいのですが。

関数をプロトタイプから継承できることはわかっていますが、それはすべてのモデルでコードの繰り返しにもつながります。このプロパティをすべてのモデル オブジェクトに挿入するように knockout.js を変更する方法はありますか?

編集:

私の希望する目標を達成する別のアプローチがある場合は、その目標について詳しく説明します。検証ルールで拡張されたモデル内のすべてのプロパティで isValid() を呼び出すことができるノックアウト検証.js を使用します。モデル内の他のプロパティを検査し、それらに対して isValid() を呼び出す関数をすべてのモデルに追加したいと考えています。そうすれば、モデルに明示的に追加することなく、すべてのモデルで使用できる汎用検証関数を作成できます。

4

1 に答える 1

1

ノックアウトのコアデータ型にカスタム関数を追加できます。または、エクステンダーを確認し、エクステンション内で関数をオブザーバブルに追加することもできます。ただし、これらの手法はどちらも、ViewModelレベルではなく、「観察可能な」レベルでの横断的関心事に対処していることに注意してください。

何をしているのか知りたいdoSomethingです。ViewModel内のいくつかのオブザーバブルにアクセスする必要があると仮定すると、動作がオブザーバブルにアタッチされるように、問題をリフレームできるはずです。

于 2012-12-27T18:19:42.543 に答える