backbonejs是否像canjs一样使用“实时绑定”?

时间:2012-07-27 20:28:49

标签: javascript backbone.js javascriptmvc

我一直在比较js mvc,并注意到很多人都在吹嘘canjs的“活动绑定”。有人可以解释它究竟是什么以及它与其他流行的mvc(如backbonejs,spine等)相比有何帮助...

2 个答案:

答案 0 :(得分:6)

您使用实时绑定,因为使用CanJS,您可以用以下代码替换所有代码:

<h1><%= model.attr('name') %></h1>

答案 1 :(得分:3)

Backbone确实支持实现模型绑定,但它不像其他客户端应用程序框架那样自动,例如,AngularJS的数据 - 通过ng-controllerEmberJSbindAttr绑定。

对于一些真正基本的代码来更新视图作为模型的状态更改,请使用Backbone.View的{​​{3}},如下例所示:

var ExampleView = Backbone.View.extend({
    id: 'myView',

    events: {
        // using an #id selector here is also acceptable
        'change [data-attrname=name]': function(e) {
            // update the value in the model
            this.model.set('name', $(e.target).val());
        }
    },

    initialize: function(options) {
         this.model.on('change', this.render, this);
    },

    render: function() {
        var html = _.template('<h1 data-attrname="name"><%= name %></h1>', 
                              this.model.toJSON());
        this.$el.html(html);
        return this;
    }
});

将呈现以下HTML(myView是ExampleView隐式创建的div):

<div id="myView">
    <h1 data-attrname="name"></h1>
</div>

这实际上是在模型更改时从UI手动绑定并批量处理(重新render整个视图)。 Backbone被故意设计为比其他一些框架更不自觉,允许您按照自己认为适合添加其他库的方式实现。

关于如何更自动地建模绑定的一些更复杂的技术,以下是他们的作者列出的一些资源:

  1. events object
  2. Los Techies / Derek Bailey
  3. theironcook