0

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

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

这是我的代码。(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 开发者工具的控制台中显示 401 授权按摩时。我可以在没有 Backbone.js 的情况下获得时间线。

请教我应该如何解决它。

谢谢你的好意。

4

1 回答 1

0

如果你可以在没有 Backbone.js 的情况下让它工作,你可以在没有 Backbone 的情况下使用 fetch 方法。无论如何,同步方法只有在你做 REST 时才有用,比如获取、更新、创建和删除方法。

在你的情况下,只有一个 fetch 对吗?因此,覆盖您的 fetch 函数并在插入主干之前执行您所做的任何事情。听听您自己的成功,然后执行 Collection.reset。

var collection = Backbone.Collection.extend({
   _onLoaded : function(data) {
       this.reset(data, {parse:true});
   },
   fetch : function() {
       $.get("").success(_.bind(this._onLoaded, this));
   }
});
于 2013-04-20T14:30:53.200 回答