我正在尝试将工作中的 Durandal 视图模型模块从单例转换为实例。原始工作版本遵循以下模式:
define(['knockout'],
function(ko) {
var vm = {
activate: activate,
companyId: null;
company: ko.observable({})
};
return vm;
function activate(companyId) {
vm.companyId = companyId;
//get company data then
vm.company(data);
}
}
新版本导出一个函数,以便我在每个请求上都获得一个新实例......
define(['knockout'],
function(ko) {
var vm = function() {
activate = activate;
companyId = null;
company = ko.observable({});
};
return vm;
function activate(companyId) {
vm.companyId = companyId;
//get company data then
vm.company(data);
}
}
我得到的错误是“object function () [...function signature...] has no method company on line vm.company(data);
。我做错了什么?为什么我可以设置属性但无法访问可观察到的淘汰赛? 我应该如何重构原始代码,以便在每个请求上都获得一个新实例?
我为简化这个问题的代码所做的努力掩盖了实际问题。我真正的代码是使用 Q Promise 并使用 Q.All 调用两个方法。由于 Q 位于全局命名空间中,因此在转换为函数后无法解析我的视图模型。将视图模型传递给 Q 调用的方法解决了这个问题。