KnockoutJS / AJAX更新视图模型

时间:2012-06-04 16:48:15

标签: ajax arrays knockout.js

目前正在玩KnockoutJS。在这个例子中,只是尝试从ajax / json feed(使用twitter)更新可观察数组。

似乎失去了什么"这个"是在尝试更新我的可观察数组(currentTweets)时。我尝试过将bind添加到各个地方,但没有运气。

我得到的错误是:未捕获的TypeError:无法调用方法' push'未定义的

我确定我在做一些愚蠢的事情,在这里它正在行动(看起来不多!)

http://jsbin.com/oyuteb

我已经阅读了很多关于Knockout地图的内容,但是还没有足够的信心去接受它!

因此,任何帮助或指导都将成为现实。

由于

1 个答案:

答案 0 :(得分:3)

解决此问题的最简单方法是将您的viewmodel的“this”代理到另一个变量中,以便在处理程序内部可用。当jquery ajax调用成功处理程序时,上下文是不同的,因此这引用了其他内容。

所以你会有

function twitterViewModel() {
    var self = this;
    this.currentTweets = ko.observableArray([]);
    ...

    this.getTweets = function(){

        $.ajax({
            dataType: 'jsonp',
            url: 'http://search.twitter.com/search.json?callback=?&q=' 
                     + this.searchTerm() + '&rpp=50',
            success: function (data) {
                $.each(data.results, function(i,tweet){
                    self.currentTweets.push({'keywords' : 'bugger'});
                });
            }
        });
    }
}

您可以取消绑定调用并改为使用self

希望这有帮助。