0

この修正されたサンプル コードを使用して、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 は Array[15] を示します

しかし、私はそれをモデルに設定した後

myModel.currentTweets(theData);

myModel.currentTweets は空の配列として反映されます []

何が問題なのですか?

4

1 に答える 1

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 関数を使用します。

于 2013-02-24T00:52:44.353 に答える