0

KnockoutJS を使用して、ビューモデルに基づくプラグインを開発しています。同じアプリケーションで実行されている別のビューモデルの関数とプロパティにアクセスする方法はありますか? このようなもの:

私のビューモデル:

    function myViewModel()
    {
        this.prop1 = ko.observable(123);
        this.prop2 = ko.observable("Hello");
        ..
        ..
    }

    myViewModel.prototype.func1 = function() {
        //do something...
    };

    myViewModel.prototype.func2 = function() {
        //do something...
    };

そして他のビューモデル:

    function otherViewModel()
    {
        this.propA = ko.observable(456);
        this.propB = ko.observable("Goodbye");
        ..
        ..
    }

    otherViewModel.prototype.funcA = function() {
        //do something...
    };

    otherViewModel.prototype.funcB = function() {
        //do something...
    };

otherViewModelのオブザーバブルは、ポップアップやマスクなどの特定の一般的な機能を制御します。myViewModelotherViewModelをインスタンス化し、それらのプロパティを設定する方法はありますか?

または、それらをグローバルに取得および設定する方法はありますか?

私はこのパラダイムに非常に慣れていないので、軽く踏んでください。ありがとうございました。

4

1 に答える 1

0

スコープを使用するというコメントに同意します-しかし、いくつかの迅速で汚い方法があります...

myViewModel をインスタンス化すると、ウィンドウでインスタンス化でき、直接参照できます

window.myViewInstance = new myViewModel()

function myOtherViewModel () {
  this.propA = myViewInstance.xyz
}

この方法は、他の場所で使用したいグローバル機能を提供するものがある場合に使用します。jQuery と ko が行うことです... $ と ko をウィンドウにバインドします。

myViewModel.xyz = ko.observable() の場合、括弧なしで渡すと、オブザーバブルとして渡されます-値が変化すると変化します。括弧を使用すると、評価時に結果が渡されます。

または、このように ko.dataFor を使用して参照できます。

myViewModel () {...}
instance = new myViewModel
ko.applyBindings(instance, $('div')[0])
// this applies bindings of myViewModel to the first div on the page only

myOtherViewModel () {

  this.propA = ko.dataFor($('div')[0])
  // passes the entire object
  this.propB = ko.dataFor($('div')[0]).xyz
  // gives you just one property

}

オブジェクトをページの一部だけにスコープします

于 2014-10-26T17:51:32.513 に答える