gpt4 book ai didi

javascript - 如何将 AMD 模块从单例转换为实例?

转载 作者:行者123 更新时间:2023-11-30 12:54:38 26 4
gpt4 key购买 nike

我正在尝试将工作中的 Durandal View 模型模块从单例转换为实例。原始工作版本遵循以下模式:

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 the line vm.company(data);。我是什么做错了什么?为什么我可以设置属性但不能访问 knockout observable?我应该如何重构原始代码以便在每次请求时都获得一个新实例?


我为简化此问题的代码所做的努力隐藏了实际问题。我的真实代码是使用 Q promises 并使用 Q.All 调用两个方法。由于 Q 在全局命名空间中,因此在转换为函数后无法解析我的 View 模型。将 View 模型传递给 Q 调用的方法解决了问题。

最佳答案

这样试试:

var vm = function() {
this.activate = activate;
this.companyId = null;
this.company = ko.observable({});
};

在没有任何限定符的情况下,这些关键字被分配给全局变量。

但是,如果此模块已被您无法轻易修改的代码使用,那么您可能会遇到问题,因为任何引用 vm 的内容都需要知道这是他们需要调用的函数。

关于javascript - 如何将 AMD 模块从单例转换为实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19641182/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com