我使用这个修改过的示例代码从twitter api中提取一些数据并将结果设置为viewModel
var myModel = new MyViewModel();
// Handler for .ready() called.
function MyViewModel(){
this.show_search = ko.observable(true); // Message initially visible
this.show_player = ko.observable(false); // Message initially visible
this.tweetSearchKeyWord = ko.observable("google");
this.currentTweets = ko.observableArray([]);
this.showSearch = function(){
this.show_search(true);
this.show_player(false);
};
this.showPlayer = function(){
this.show_search(false);
this.show_player(true);
};
};
ko.computed(function () {
$.getJSON("http://search.twitter.com/search.json?q=%23" + myModel.tweetSearchKeyWord()+"&callback=?", function (data) {
theData = data.results;
myModel.currentTweets(theData);
});
}, viewModel );
ko.applyBindings( myModel );
收到的数据很好,data.results显示数组[15]
但在我用
将其设置为模型后myModel.currentTweets(theData);
myModel.currentTweets反映为空数组[]
知道什么是错的吗?
答案 0 :(得分:0)
没有必要使用ko.computed,因为它的工作方式不同。您需要做的只是指定任何事件处理程序并在那里填充数据。这样的事情:
在html中的某个地方:
<button data-bind="click:getData">Get</button>
在js:
function getData()
{
$.getJSON("http://search.twitter.com/search.json?q=%23" + myModel.tweetSearchKeyWord()+"&callback=?", function (data) {
myModel.currentTweets(data.results);
});
}
或者,如果要在确定的时间间隔后更新数据,请使用setTimeout()JavaScript函数。