Ajax响应不会改变我的viewmodel

时间:2014-10-26 16:54:15

标签: javascript jquery ajax knockout.js

我绑定了一个值和一个列表,并希望从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上阅读了很多相关的解决方案,并尝试了几个,但没有一个工作。

1 个答案:

答案 0 :(得分:2)

尝试:

this.count(response.count);

这应该可以解决问题。

有关可观察对象的更多信息,请查看http://knockoutjs.com/documentation/observables.html

您的代码中也存在潜在的范围问题。当您在回调中遇到此问题时,无法保证您获得viewModel的范围。因此,您应该在回调之外添加此行:

var self = this;

在回调中你应该改为:

self.count(response.count);