0

現在、KnockoutJSで遊んでいます。この例では、(twitterを使用して)ajax/jsonフィードから監視可能な配列を更新しようとしています。

監視可能な配列(currentTweets)を更新しようとすると、「これ」が何であるかがわからなくなったようです。いろいろな場所にバインドを追加してみましたが、運が悪かったです。

私が得るエラーは次のとおりです:Uncaught TypeError:undefinedのメソッド'push'を呼び出すことができません

私は愚かなことをしていると確信しています、ここでそれは実行中です(あまり見ることはありません!)

http://jsbin.com/oyuteb

ノックアウトマッピングについてたくさん読んだことがありますが、まだそれを受け入れるのに十分な自信がありません!

したがって、ヘルプやガイダンスはすべてファブになります。

ありがとう

4

1 に答える 1

3

これを解決する最も簡単な方法は、ビューモデルの「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代わりに使用できます。

お役に立てれば。

于 2012-06-04T17:45:44.563 に答える