我有一个带有两个视图模型的应用程序:一个呈现表单,另一个呈现包含表单数据的表。
通过Ajax调用成功保存表单后,将重新加载表。表格也应该重装,但我似乎无法实现。基于以下内容,我是否正确处理了这个问题?
function FormViewModel() {
self = this;
self.loadForm = function () {
...
}
self.save = function () {
success: self.loadForm();
tvm.loadTable();
}
}
function TableViewModel() {
self = this;
self.loadTable = function () {
...
};
}
ko.applyBindings(fvm = new FormViewModel(), document.getElementById("Form"));
fvm.loadForm();
ko.applyBindings(tvm = new TableViewModel(), document.getElementById("Table"));
tvm.loadTable();
答案 0 :(得分:1)
我使用了您最初发布的7
版本。这不完全正常,但我认为我可能已经发现了你的问题:
我看到两个大问题:
self = this;
你在两个地方这样做。这会创建一个全局变量self
,因此在FormViewModel方法中,self
实际上是TableViewModel。确认!很容易解决:
var self = this;
此外,当您通过ko.observableArray
创建新的observable时,需要重新绑定。然而,重新绑定是不好的。相反,您应该只创建最初的observable,然后根据需要更新其值。也就是说,做B.而不是A.
//A
self.load = function () { self.a = ko.observable(); };
//B
self.a = ko.observable();
self.load = function () { self.a(null); };