Backbone.js是否适合执行此任务?

时间:2011-12-20 05:19:05

标签: backbone.js

我现在一直在看backbone.js教程几个小时,如果没有花费一些时间去寻找它,那么它是否适合我想要达到的目标。

我的应用程序主要基于一个页面而且相当AJAX很重。此页面上有几个UI元素,用于轮询服务器并独立更新自身。此外,还有一个中央轮询机制,可以查找可能触发任何其他UI组件更新的事件。

我正在考虑将所有这些独立的URL聚合为一个,并让我的前端只监听该URL,然后将每个事件委托给相应的UI元素。实际上,它有点像我前端的消息总线。

听起来像合理使用骨干?或者我错过了它的观点?

2 个答案:

答案 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/