我绑定了一个值和一个列表,并希望从Ajax回调中更改它。我在.get()
中检索了一个新值,但是当我.get()
的回调实际发生时,我将检索到的值分配给我的视图模型的属性时,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上阅读了很多相关的解决方案,并尝试了几个,但没有一个工作。
答案 0 :(得分:2)
尝试:
this.count(response.count);
这应该可以解决问题。
有关可观察对象的更多信息,请查看http://knockoutjs.com/documentation/observables.html
您的代码中也存在潜在的范围问题。当您在回调中遇到此问题时,无法保证您获得viewModel的范围。因此,您应该在回调之外添加此行:
var self = this;
在回调中你应该改为:
self.count(response.count);