【发布时间】:2013-05-08 19:11:42
【问题描述】:
我正在构建一个包含 10 个不同部分的大页面,并且正在使用 Knockout 进行事件绑定等。
每个部分都包含一个表单,该表单具有自己的 viewModel 及其字段和验证属性等。我在阅读 this 关于多视图模型的帖子后对其进行了样式化。
我有一个导入大量子视图模型的 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') 上?
欢迎任何帮助。
谢谢, -- 斯科特
【问题讨论】:
标签: knockout.js