私はSPAを構築していますが、すべてうまくいっています。動的に構築される複数のビューモデルがあり、同じ種類が複数存在する可能性があります。つまり、ページ上の特定の div にバインドされた独自のモデルを持つ 2 つの計算機を開くことができます。
最近、いくつかのビューモデルが Web サービスから同じデータを要求しており、30 秒から 1 分ごとに一定のループが発生していることに気付きました。そのため、同じサービス コールが 30 秒ごとに複数回行われていましたが、同じ情報が返されていました。
したがって、私が理解しようとしているのは、複数のviewModelに変更を通知して更新できる「グローバル」なobservableArrayを作成する方法です。これは、ページ上のデータが一貫していることを確認するのにも役立ちます。
私は次のようなことができることを望んでいました:
var GlobalData = (function() {
var commonData = ko.observableArray();
setInterval(function() {...go get data...commonData(data);}, 30000);
return {CommonData:commonData}
})();
ko.applyBindings(GlobalData, $('#RandomLonelyDiv')[0]);
じゃあ後で
function Calculator(element){
function init() { ko.applyBindings(calculator, $(element)[0]); }
var calculator = {
CommonData = GlobalData.CommonData
}
return calculator;
}
他のすべてのビューモデルを含む MainViewModel を持っていない唯一の理由は、率直に言って自分の環境に設定する方法がわからないためです。
Windows と呼ばれる ko.observableArray を含む AppViewModel があります。これには、特定のウィンドウ タイプを構築するためのオプション/情報を定義するオブジェクトが含まれています。
<!-- ko template:{name:'WindowTemplate', foreach:SelectedTab().Windows} --><!-- /ko -->
次に、電卓などの特定のタイプの新しいビューモデルを作成する、変更された kendoWindow を作成するカスタム ウィンドウ バインディングがあります。しかし、これを始めたとき、そのビューモデルを AppViewModel に入れる方法がよくわかりませんでした。おそらくそれは単なる別の配列ですか?