我现在一直在看backbone.js教程几个小时,如果没有花费一些时间去寻找它,那么它是否适合我想要达到的目标。
我的应用程序主要基于一个页面而且相当AJAX很重。此页面上有几个UI元素,用于轮询服务器并独立更新自身。此外,还有一个中央轮询机制,可以查找可能触发任何其他UI组件更新的事件。
我正在考虑将所有这些独立的URL聚合为一个,并让我的前端只监听该URL,然后将每个事件委托给相应的UI元素。实际上,它有点像我前端的消息总线。
听起来像合理使用骨干?或者我错过了它的观点?
答案 0 :(得分:3)
Backbone在这种情况下应该可以正常工作。
创建一个中央事件轮询器。这将从服务器获取所有类型的事件,并将它们发布到应用程序的其余部分(未测试):
var EventPoller = Backbone.model.extend({
url: "events/",
poll: function(){
this.fetch({
success: function(self, response){
self.handleEvents(response);
self.poll();
}, error: function(self){
self.poll();
}
})
},
handleEvents: function(events){
var self = this;
$(events).each(function(index, event){
self.trigger(event.name, event.data);
});
}
});
然后你可以让几个模特听这些事件:
var StockModel = Backbone.Model.extend({
initialize : function() {
this.poller.bind('stockChange', this.changeStock, this);
},
changeStock: function(stock){
this.set({name: event.name});
}
});
最后让一个视图监听模型中的变化:
var StockView = Backbone.View.extend({
initialize : function() {
this.model.bind('change:name', this.updateStock, this);
//this.poller.bind('stockChange', this.updateStock, this); //you could also listen for poll events directly in view with out having a model for each view.
},
updateStock: function(){
$(this.el).html(model.get("name"));
}
});
设置轮询器和视图:
var eventPoller = new EventPoller();
var stockModel = new StockModel({poller: eventPoller})
var stockView = new StockView({model:stockModel});
eventPoller.poll();
一般建议是,骨干需要花费一些时间来学习,但如果您阅读文档并遵循一些基本示例,您将会加快速度。
也许与骨干最混淆的事情是this
。我建议使用firebug并通过应用程序调试以查看this
如何更改。
答案 1 :(得分:0)
Backbone会工作,但我也会查看ember.js,也称为sproutcore 2.0,骨干对我来说太冗长了,ember.js有点照顾,检查http://www.emberjs.com/。