【发布时间】:2013-09-26 04:45:30
【问题描述】:
我正在建立一个 SPA,一切进展顺利。它有多个动态构建的 Viewmodel,并且可以有多个相同类型,即您可以打开两个计算器,每个都有自己的模型,绑定到页面上的特定 div。
最近我意识到有几个视图模型从 Web 服务请求相同的数据,并且每 30 秒 - 1 分钟循环一次。因此,每 30 秒多次调用相同的服务,但返回的信息相同。
所以我想弄清楚的是如何创建一个“全局”observableArray,多个 viewModel 可以被通知更改和更新,而不是自己做,这也有助于确保页面上的数据是一致。
我希望我可以这样做:
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 的唯一原因是因为坦率地说我不知道如何为我的环境设置它。
我有一个 AppViewModel,其中包含一个名为 Windows 的 ko.observableArray,其中包含定义选项/信息以构建某些窗口类型的对象。
<!-- ko template:{name:'WindowTemplate', foreach:SelectedTab().Windows} --><!-- /ko -->
然后我有一个自定义窗口绑定,它创建一个修改后的 kendoWindow,它创建一个特定类型的新视图模型,例如计算器,就像我说的那样,您可以同时拥有多个计算器。但是当我开始这个时,我并不确定如何将该视图模型放入我的 AppViewModel 中。也许它只是另一个数组?
【问题讨论】: