我绑定(bind)了一个值和一个列表,并希望从 Ajax 回调内部更改它。我在 .get()
中检索了一个新值,但是当我实际发生 .get()
的回调时,我将检索到的值分配给我的 View 模型的属性, UI 不刷新。这是我的代码:
function SearchViewModel() {
this.count = ko.observable(count);
this.list = ko.observableArray(list);
//I had count and list before I assigned.
this.addPage = function() {
var form = $('#form');
var serializedData = form.serialize();
$.get("{% url 'search:search' %}", serializedData, function(response){
console.log(this.count); // it's undefined here.
this.count = response.count;
console.log(this.count); // it's the value I want to updated, e.g. 20. But UI is not refreshedenter code here
});
};
}
我也想在回调中更新列表,但现在即使是简单的 count
值也没有被更新。我在 stackoverflow 上读到了很多相关的解决方案,并尝试了几种,但没有一个起作用。
最佳答案
尝试:
this.count(response.count);
这应该可以解决问题。
有关可观察量的更多信息,请查看 http://knockoutjs.com/documentation/observables.html
您的代码中还存在潜在的范围问题。当您在回调中引用 this 时,不能保证您获得 viewModel 的范围。因此,您应该在回调之外添加此行:
var self = this;
在回调中您应该更改为:
self.count(response.count);
关于javascript - Ajax 响应没有改变我的 View 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26575465/