2012-06-04 85 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