2012-06-04 86 views
0

目前在玩KnockoutJS。只是在本例中尝试从ajax/json提要(使用twitter)更新可观察数组。KnockoutJS/AJAX更新视图模型

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

我得到的错误是:遗漏的类型错误:无法调用未定义

我敢肯定,我做了一些愚蠢的方法“推”,这里是它的行为(没有什么好看的!)

http://jsbin.com/oyuteb

我读过很多关于淘汰赛映射,但不觉得有足够的信心采取上呢!

所以,任何帮助或指导将是fab。

感谢

回答

3

解决这个最简单的方法是将代理你的视图模型的“本”到另一个变量,因此它可里面的处理程序。当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代替。

希望这会有所帮助。

+0

太棒了!谢谢。在很多例子中,我看到了“自我”的各种用法,但在我看来并不一致。 我应该使用self.currentTweets等吗? – Leads

+1

这取决于你。有些人把它命名为“那个”。请记住,如果您有多个嵌套关闭与多个自我属性,他们可以发生冲突。 – madcapnmckay