1

我一直在比较 js mvc,并注意到很多人都在吹嘘 canjs 所做的“实时绑定”。有人可以解释一下它到底是什么,以及与其他流行的 mvc 相比,它有什么帮助,如主干js、脊柱等......

4

2 回答 2

6

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

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

于 2012-09-07T16:13:06.873 回答
3

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

对于在模型状态更改时更新视图的一些非常基本的代码,请使用Backbone.View's eventsobject,如下例所示:

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>

这实质上是render在模型更改时从 UI 和批发(重新定义整个视图)进行手动绑定。Backbone 被有意设计为不像其他一些框架那样固执己见,以允许您通过添加其他库来实现您认为合适的东西。

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

  1. Los Techies / Derek Bailey
  2. 他们的厨师
  3. XTargets
于 2012-07-27T21:05:32.327 回答