Javascript 传递一个函数,该函数返回ko的值
我有两个函数Javascript 传递一个函数,该函数返回ko的值,javascript,knockout.js,Javascript,Knockout.js,我有两个函数generate和test。当用户单击按钮时,将调用生成,然后调用测试函数。我收到以下错误: 传递一个返回ko.computed值的函数 此错误在测试函数的此行中抛出: var unmapped = ko.mapping.toJS(this); 这是我的viewmodel,具有可观察属性 下面是两个函数。如果我将test函数的内容移动到generate中,一切正常,但我需要将逻辑置于两个不同的函数中。我能做什么 我被困在这里了。任何帮助都将不胜感激 generate = func
generate
和test
。当用户单击按钮时,将调用生成,然后调用测试函数。我收到以下错误:
传递一个返回ko.computed值的函数
此错误在测试函数的此行中抛出:
var unmapped = ko.mapping.toJS(this);
这是我的viewmodel,具有可观察属性
下面是两个函数。如果我将test
函数的内容移动到generate
中,一切正常,但我需要将逻辑置于两个不同的函数中。我能做什么
我被困在这里了。任何帮助都将不胜感激
generate = function () {
if (!omega.validatableFranchiseGeneration.validate()) {
return false;
}
omega.franchiseInfo.IsForGeneration(true);
test();
}
var test = function () {
getIpsAndPorts();
for (var i = 0; i < omega.franchiseInfo.LanguagesInfoViewModel().length; i++) {
if ($.isArray(omega.franchiseInfo.LanguagesInfoViewModel()[i].SubMenuItemsViewModel)) {
omega.franchiseInfo.LanguagesInfoViewModel()[i].SubMenuItemsViewModel = omega.franchiseInfo.LanguagesInfoViewModel()[i].SubMenuItemsViewModel[0];
}
}
var unmapped = ko.mapping.toJS(this);
var jsonData = ko.toJSON(unmapped);
$.ajax({
url: "/franchise/Save",
type: "POST",
// data: ko.toJSON({ folderName: FolderName }),
data: { franchiseInfoViewModel: jsonData },
//traditional: true,
//contentType: "application/json; charset=utf-8",
dataType: 'json',
success: function (data, textStatus, xhr) {
window.location.href = data.redirectToUrl;
},
error: function (request, status, error) {
jsonValue = jQuery.parseJSON(request.responseText);
omega.franchiseInfo.errorMessages([]);
for (var i = 0; i < jsonValue.errorMessages.length; i++) {
omega.franchiseInfo.errorMessages.push({ errorMessage: ko.observable(jsonValue.errorMessages[i].ErrorMessage) });
}
for (var i = 0; i < omega.franchiseInfo.LanguagesInfoViewModel().length; i++) {
InitializeViewLanguagesInfo(omega.franchiseInfo.LanguagesInfoViewModel()[i]);
}
}
});
}
generate=函数(){
如果(!omega.validableGeneration.validate()){
返回false;
}
omega.特许经营信息是伪造的(真);
test();
}
var测试=函数(){
getIpsAndPorts();
对于(var i=0;i
在没有看到所有代码的情况下,很难确定这一点,但是如果直接包含在generate中的代码(原样)能够正常工作,那么我愿意打赌这个
不是您认为的测试
函数<代码>此
在测试
函数中的含义与在生成
中的含义不同
启动Chrome或Firebug,并在var unmap=ko.mapping.toJS上设置断点(此)代码>行。运行您的程序,当断点点击时,转到控制台并查看此
。这是你的模型吗
如果这个
是您在生成
中所期望的,您可以像这样调用测试
:
test.apply(this);
这将为方法调用显式设置This
的上下文
另一个选项是在ViewModel内设置self
变量。这通常在顶部完成,看起来像:var self=This代码>。通过创建此变量,您可以在外部“函数”范围内的任何函数中引用self',而不必担心该`波动'的值
--
下面是一个简单的小提琴来模拟我认为正在发生的事情:
打开Chrome或Firebug控制台,查看记录的对象。请注意,窗口
是我刚才调用updatea()
时记录的对象,但在最初的单击函数中以及调用updateb.apply(此)
或updatec()
(引用了self
)时是对象。谢谢您的回答。我重构了我的逻辑,转而使用另一种解决方案。尽管如此,我还是接受了你的回答。