2013-04-20 20 views
0

我是Backbone.js的初學者。 我已經完成了一些教程。如何使用Backbone.js獲取Tweet時間軸?

我要創建我自己的非教程應用程序,並嘗試創建簡單的應用程序使用骨幹集合或模型顯示鳴叫時間表。

這是我的代碼。 (oauth.js和sha1.js都包含在HTML)

$(function(){ 

var Tweet = Backbone.Model.extend({ 
}); 

var Twitter = Backbone.Collection.extend({ 
    model: Tweet, 
    initialize: function(api){ 
     this.consumerKey = //consumerKey; 
     this.consumerSecret = //consumerSecret; 
     this.accessToken = //accessToken; 
     this.accessTokenSecret = //accessTokenSecret; 

     this.message = { 
      method: "GET", 
      action: api, 
      parameters: { 
       oauth_version: "1.0", 
       oauth_signature_method: "HMAC-SHA1", 
       oauth_consumer_key: this.consumerKey, 
       oauth_token: this.accessToken 
      } 
     }; 
    }, 

    getTimeline: function(){ 
     var accessor = { 
      consumerSecret: this.consumerSecret, 
      tokenSecret: this.accessTokenSecret 
     }; 

     OAuth.setTimestampAndNonce(this.message); 
     OAuth.SignatureMethod.sign(this.message, accessor); 
     this.url = OAuth.addToURL(this.message.action, this.message.parameters); 
     var options = { 
      success: function(data, res){ 
       console.log(data); 
       console.log(res); 
      } 
     }; 
     this.fetch(options); 
    }, 

    sync: function(method, model, options){ 
     options.timeout = 10000; 
     options.dataType = 'jsonp'; 
     return Backbone.sync(method, model, options); 
    } 

}); 

var twitter = new Twitter("https://api.twitter.com/1.1/statuses/home_timeline.json"); 
twitter.getTimeline(); 
}); 

當我刷新的HTML頁面,但401授權按摩顯示在Chrome開發者工具的控制檯。 我可以得到沒有Backbone.js的時間線。

請教我如何解決它。

謝謝你的好意。

+0

401當''sync''函數中增加'options.jsonp = false'和'options.cache = true'時,授權錯誤消失。但是,「成功」回調並沒有奏效。 – utwang 2013-04-20 11:04:45

回答

0

如果你能在沒有Backbone.js的情況下工作,你可以使用沒有Backbone的獲取方法。 無論如何,如果您執行REST,例如獲取,更新,創建和刪除方法,同步方法只能幫助完整。

在你的情況下,只有一個獲取權?因此,重寫您的獲取函數並在插入主幹之前完成您所做的任何工作。傾聽您的成功,然後執行Collection.reset。

var collection = Backbone.Collection.extend({ 
    _onLoaded : function(data) { 
     this.reset(data, {parse:true}); 
    }, 
    fetch : function() { 
     $.get("").success(_.bind(this._onLoaded, this)); 
    } 
}); 
+0

謝謝你的回答。我重寫了取方法,但_onLoaded函數尚未被調用。儘管我可以在Chrome開發人員工具中的Network Panel Preview上看到20項json數據,但我無法在Backbone中獲取json數據。 – utwang 2013-04-21 14:45:40

+0

用「always」代替「success」,在「_onLoaded」代替「console.log(arguments)」查看發生了什麼。 jquery可能無法解析json或其他原因 – Luke 2013-04-23 11:05:09

相關問題