在 Durandal 的哲学中,shell 不应该检索数据。相反,购买 vm 应该在其activate
回调中执行此操作(http://durandaljs.com/documentation/Creating-A-Module/)。activate
如果票据收集是一项async
操作,请确保返回一个承诺。
这是该模式的一个示例,其中getListCollection
可以返回缓存结果(同步)或异步结果,因此包装在 $.when() 中,它总是返回一个promose。
http://www.spirit.de/demos/metro/durandalsp3/index.html#/lists
var activate = function () {
var self = this;
var webUrl = L_Menu_BaseUrl;
self.webUrl(webUrl);
logger.log('Activatíng List View', null, 'list', true);
return $.when(spdata.getListCollection({ webUrl: webUrl })).then(function (result) {
// Access to detail list information through listInfo[listName]
self.listInfo = result;
self.lists(createListVMs(result));
return true;
});
};
根据评论更新:如果您必须在 shell 中检索数据以做出决策,有几个选项。
- 您可以考虑将购买 vm 转换为小部件,因为在 Durandal 1.2 中,只有小部件可以传入额外的数据。
- 作为替代方案,创建一个
global
返回单例并在外壳和购买之间共享的 AMD。
- 第三种选择是将购买声明为 shell 中的依赖项并直接修改购买。
有关详细信息,请参阅@Joseph Gabriel将 DurandalJS 中的数据传递到其他视图。