使用Durandal,我的应用程序中有两个视图模型,比方说vmCompanies& vmEmployees。我有两个视图,每个视图模型一个,在每个视图模型中,您可以看到所有公司和所有员工。
然而,当我加载我的员工时,他们在数据库中有一个ID,用于他们所雇用的公司。我想做的是以下伪:
这样我可以避免vmEmployees拥有自己的公司内部缓存的要求。到目前为止,我一直无法弄清楚Durandal如何查询并询问“给我这个已经加载的视图模型”。它似乎在内部有这个,因为当我在视图之间导航时,它们被缓存而不是重新加载(与VM相同)...我到目前为止还没有看到我可以做什么它
答案 0 :(得分:9)
您可以通过____moduleId____手动require()
视图模型。只要你的视图模型模块返回一个对象而不是一个函数,你就会处理一个单例,所以你可以确定你会得到正确的实例。
如果您不确定__moduleId__是什么,可以使用this chrome extension查看视图模型的属性,包括__moduleId __。
但,而不是手动实例化VM,更好的选择可能是创建一个单独的模块,用于存储缓存的公司。我有一个带有自己内部缓存的数据模块,我通常会为此目的使用它,但您可以专门为公司创建一个,并将信息存储在其中。如果合适,它甚至可以负责加载自己的数据。
这里有一些简单的代码可以帮助解释:
请注意,这对于需要JS使用sugar syntax - 如果您使用基于数组的语法,则需要相应地进行翻译。如果需要,我可以提供帮助。
//companies-cache.js
define(function(require){
//some auto-loading logic here, if you wish
var companies = ko.observableArray([]);
return {
companies: companies
};
});
//vmCompanies, vmEmployees
define(function(require){
var companiesCache = require("viewModels/companies-cache");
//additional properties for this specific VM
...
return {
companies: companiesCache.companies
};
});