目前正在玩KnockoutJS。在这个例子中,只是尝试从ajax / json feed(使用twitter)更新可观察数组。
似乎失去了什么"这个"是在尝试更新我的可观察数组(currentTweets)时。我尝试过将bind添加到各个地方,但没有运气。
我得到的错误是:未捕获的TypeError:无法调用方法' push'未定义的
我确定我在做一些愚蠢的事情,在这里它正在行动(看起来不多!)
我已经阅读了很多关于Knockout地图的内容,但是还没有足够的信心去接受它!
因此,任何帮助或指导都将成为现实。
由于
答案 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
。
希望这有帮助。