我一直在比较js mvc,发现很多人都在吹捧canjs的“实时绑定”。有人可以解释一下它到底是什么以及与其他流行的mvc(例如,borderjs,spine等)相比有何帮助。

最佳答案

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

对于一些非常基本的代码,可以在模型状态更改时更新视图,请使用Backbone.Viewevents object,如本例所示:

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的设计故意不像其他框架那么固执己见,以允许您通过添加其他库来实现自己认为合适的事情。

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


Los Techies / Derek Bailey
theironcook
XTargets

关于javascript - 主播js是否像canjs一样使用“实时绑定(bind)”?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11695218/

10-13 07:59
查看更多