使用 Knockout 2.0 和 MVC3 Razor 表单,当我引入 ajax 方法时,我无法进行依赖的可观察工作。我已经设置了一组作为计算一部分的 observables,当我返回这些 observables 的乘积时,我能够设置一个具有正确结果的 SPAN 标签。但是,当我尝试使用 ajax 方法来处理这些可观察对象并返回结果时,我会得到不可预测的行为。首先,当 INPUT 字段更新时,ajax POST 似乎没有拾取其中一个 observables(var b POST 到 action 方法为 0,但最终被更新),然后似乎我无法设置即使它正确评估的结果。似乎 observables 或 ajax 调用都存在时间问题。虽然简单地继续在 javascript 中执行计算工作正常,我的意图是为更复杂的逻辑调用 ajax 方法。我已经从 doc.ready() 中删除了对 ko.applybindings 的调用,并且还将 SCRIPT 方法移到了页面底部——这是我发现使其部分起作用的唯一方法。我的 viewModel 设置如下:
var viewModel = {
a: ko.observable(0),
b: ko.observable(1),
c: ko.observable(2),
// commented this out, since
// the dependent observable will handle this
// d: ko.observable(0)
};
在我的依赖观察中:
viewModel.d = ko.dependentObservable(function () {
var theResult = 0;
$('.theLabel').css("visibility", "visible");
theResult=viewModel.a() * viewModel.b() * viewModel.c();
// if we return here we get a valid result
return (theResult);
// prefer to call ajax method
// first check to ensure one variable is set
if (viewModel.a() > 0) {
$.ajax("/myCalculation/getResult", {
data: ko.toJSON(viewModel),
type: "post",
context: viewModel,
contentType: "application/json",
success: function (result) {
// can't set visibility here
$('.theLabel').css("visibility", "visible");
// the POST does not pick up some observables, or
// does not the set dependent observable at all
return result;
}
});
}
});