我正在构建一个包含 10 个不同部分的大页面,并且正在使用 Knockout 进行事件绑定等。
每个部分都包含一个表单,它有自己的 viewModel 以及它的字段和验证属性等。我在阅读这篇关于多视图模型的帖子后对其进行了模式化。
我有一个导入大量 subViewModel 的 masterViewModel。这一切都很好,我可以设置在字段输入等时自动填充的可观察元素。
我将我的表单提交绑定到我的 viewModel 中的一个函数,如下所示。
在我验证并保存表单字段(通过 ajax 发布)后,我想将该部分置于只读模式,但我不知道如何在我的 ajax 调用的成功回调中获取我的 viewModel 的句柄。
<form action="webservice.php" method="POST" data-bind="submit: contactInformation.validateSubmit">
this.validateSubmit = function(formElement){
var result = ko.validation.group(this, {deep: true});
if (!this.isValid()) {
result.showAllMessages(true);
return false;
}
//actually save stuff, call ajax, submit form, etc;
// setup a promise
var posting = $.post( "./webservice.php", $(formElement).serialize() );
posting.done(function( data ) {
this.contactInformation.model_state("summary"); // Uncaught TypeError: Cannot call method 'model_state' of undefined
// i also tried the line below, instead of line above...
ko.mapping.updateFromJS(this, data); // Uncaught TypeError: Cannot call method 'updateFromJS' of undefined
});
};
有谁知道如何做到这一点?我有一个来自 contactInformation.validateSubmit() 函数的 formElement 句柄。我是否需要在某处手动订阅监听器?或者有没有办法将模型挂在 $(formElement).data('model') 上?
欢迎任何帮助。
谢谢,--斯科特