backbone.js - Backbone.js 是完成这项任务的正确框架吗?

标签 backbone.js

我已经看了几个小时的 backbone.js 教程,如果不花一些认真的时间去找出它是否适合我想要实现的目标,我无法下定决心。

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

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

听起来像是对 backbone 的合理使用?还是我错过了重点?

最佳答案

对于这种情况,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});
    }
});

最后让 View 监听模型中的变化:

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")); 
    }
});

设置轮询器和 View :

var eventPoller = new EventPoller();
var stockModel = new StockModel({poller: eventPoller})
var stockView = new StockView({model:stockModel}); 
eventPoller.poll();

一般的建议是,backbone 需要花几天的时间来学习,但如果你阅读文档并遵循一些基本示例,你就会快速上手。

也许与主干最混淆的是这个。我建议使用 firebug 并通过应用程序进行调试以查看 this 的变化。

关于backbone.js - Backbone.js 是完成这项任务的正确框架吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8571130/

相关文章:

validation - Backbone - 未调用模型验证且未捕获 "invalid"事件

javascript - 将主干获取/初始化变量传递给 View

javascript - 多次 Backbone 渲染 View

javascript - 带 OR 条件的 Backbone 集合 where 子句

javascript - 使用 requirejs 加载 Backbone 插件

java - jQuery 模板和 Backbone.js

javascript - Backbone 模型无法获取任何数据

javascript - 对主干集合中的模型进行排序奇怪的行为

javascript - 在 backbone js 中使用相同的集合从不同的 url 获取数据

backbone.js - Webpack ProvidePlugin 与外部插件?