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

Reloading data in two viewmodels via Ajax

本文关键字:新加载 数据 加载 模型 两个 Ajax 通过 视图      更新时间:2024-04-04

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

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

我使用了您最初发布的7版本。这还没有完全发挥作用,但我想我可能已经发现了你的问题:

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

我看到了两个大问题:

self = this;

你在两个地方这样做。这将创建一个全局变量self,因此在FormViewModel方法内部,self实际上是TableViewModel。Ack!简单修复:

var self = this;

此外,当您通过ko.observableArray创建新的可观察对象时,您需要重新绑定。然而,重新绑定是不好的。相反,您应该只在最初创建可观察到的,然后根据需要更新其值。也就是说,做B.,而不是A.

//A
self.load = function () { self.a = ko.observable(); };
//B
self.a = ko.observable();
self.load = function () { self.a(null); };