我在外部发布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');
}
});