将新模型添加到集合(backbone.js)时触发获取

时间:2014-01-14 02:46:42

标签: javascript backbone.js

我在外部发布POST请求并更新我的服务器,在我的移动应用程序内部(从我发出POST请求的位置分开),我正在尝试在该操作发生时发出GET请求。

Backbone.js有listenTo事件,但似乎只有在应用程序内发出POST请求时才有用,即从发出POST请求的同一个地方。

我可以在手动输入myCollection.fetch()时更新我的​​应用,但我不知道如何让它自行触发。它似乎是一个必须由人或setInterval函数触发的方法。

以下是我在我的initialize方法中为我的集合视图所做的事情。

//Attempt 1
this.listenTo(this.collection, 'add', this.collection.fetch);

initialize: function() {
    var self = this;
    //Attempt 2
    this.listenTo(this.collection, 'add', this.collection.fetch({
        success: function() {
            self.render();
        }
    }));
    this.render();
},

那些不起作用,我甚至不确定它是否有效,但想法是听取集合的变化。我可能要手动触发提取?

修改:这就是我目前正在尝试的,有没有比每3000ms发出GET请求更好的方法?

initialize: function() {
    var self = this;
    this.listenTo(this.collection, 'add', this.render);
    setInterval(function(){
        self.collection.fetch({
            success: function() {
                self.render();
            }
        });
    },3000);
    this.render();
},

编辑2:我添加了一个点击事件来获取数据,似乎手动提取是唯一的方法,类似于facebook / twitter刷新方法。看来你无法收听服务器上的变化。

App.Views.PlayersView = Backbone.View.extend({
    el: '.test',
    events: {
        'click .fetch': 'fetchMethod'
    },
    initialize: function() {
        this.listenTo(this.collection, 'add', this.render);                      
        this.render();
    },
    render: function() {
        this.$el.empty();
        this.collection.each(function(model) {
            var playerView = new App.Views.PlayerView({ model: model });
            this.$el.append(playerView.render().el);
        }, this);
        this.$el.append('<button class="fetch">Refresh</button>');
        return this;
    }, 
    fetchMethod: function() {
        var self = this;
        this.collection.fetch({
            success: function() {
                self.render();
            }
        });
        alert('new item so add was triggered');
    }
}); 

0 个答案:

没有答案