通过Ajax在两个视图模型中重新加载数据

时间:2013-12-06 01:55:19

标签: javascript ajax knockout.js

我有一个带有两个视图模型的应用程序:一个呈现表单,另一个呈现包含表单数据的表。

通过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();

1 个答案:

答案 0 :(得分:1)

我使用了您最初发布的7版本。这不完全正常,但我认为我可能已经发现了你的问题:

http://jsfiddle.net/FZ6K6/12/

我看到两个大问题:

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); };