我一直在比较js mvc,发现很多人都在吹捧canjs的“实时绑定”。有人可以解释一下它到底是什么以及与其他流行的mvc(例如,borderjs,spine等)相比有何帮助。
最佳答案
Backbone确实支持实现模型绑定,但是它不是像某些其他客户端应用程序框架那样自动的,例如AngularJS通过ng-controller
或EmberJS的bindAttr
进行数据绑定。
对于一些非常基本的代码,可以在模型状态更改时更新视图,请使用Backbone.View
的events
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/