0

目前正在玩 KnockoutJS。在此示例中,仅尝试从 ajax/json 提要(使用 twitter)更新可观察数组。

尝试更新我的可观察数组(currentTweets)时,它似乎失去了“this”的范围。我尝试将绑定添加到各个地方,但没有这样的运气。

我得到的错误是:Uncaught TypeError: Cannot call method 'push' of undefined

我确定我在做一些愚蠢的事情,它正在行动(没什么可看的!)

http://jsbin.com/oyuteb

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

因此,任何帮助或指导都会很棒。

谢谢

4

1 回答 1

3

解决此问题的最简单方法是将视图模型的“this”代理到另一个变量中,以便在处理程序中可用。当 jquery ajax 调用成功处理程序时,上下文是不同的,所以 this 指的是别的东西。

所以你会有

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改为使用。

希望这可以帮助。

于 2012-06-04T17:45:44.563 回答