如何使用Backbone.js获取推文时间轴?

时间:2013-04-20 02:48:29

标签: javascript backbone.js oauth twitter-oauth

我是Backbone.js的初学者。 我已经完成了一些教程。

我想自己创建一个非教程应用程序并尝试使用Backbone Collection或Model创建显示推文时间轴的简单应用程序。

这是我的代码。 (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页面但Chrome授权按钮显示在Chrome Developer Tool的控制台中时。 我可以在没有Backbone.js的情况下获得时间线。

请教我如何解决它。

谢谢你的善意。

1 个答案:

答案 0 :(得分:0)

如果你可以在没有Backbone.js的情况下使用它,你可以使用没有Backbone的fetch方法。 无论如何,只有在执行REST时,sync方法才有用,例如获取,更新,创建和删除方法。

在你的情况下,只有一个获取权?因此,覆盖你的获取功能,并在插入主干之前做你做的任何事情。听听你自己的成功,然后做Collection.reset。

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