背景
我已经使用Backbone.js一段时间了,令我印象深刻的一个方面是它如何允许我简化,抽象和重用DOM元素作为'views'。我试图阅读一些带注释的源代码并熟悉JQuery,但对DOM如何在更深层次上工作知之甚少。
问题
Backbone.JS如何将DOM元素绑定到视图而不为其分配id,class或其他属性?
即
<ul>
<li>Item one</li>
<li>Item two</li>
<li>Item three</li>
</ul>
我喜欢Backbone这样做,并且想知道如何它做到了!
答案 0 :(得分:13)
在javascript中,变量可以保存DOM的某个元素(即Javascript对象)的引用(即程序性 thing “引用”)。 Backbone确保对于视图,至少存在该元素。例如,在jQuery中,当您引用列表中的第三项时:
var item3 = $('ul li').eq(2);
(这是一个零偏移列表,第一项是索引0,第三项是索引2),你现在可以将文本从“第三项”更改为“第三项一四一五九” jQuery DOM操纵器:
item3.text("Item three point one four one five nine");
即使该列表项没有任何特定的类或ID属性。
骨干视图的el
字段包含对父元素的常量引用,该元素在该元素中呈现其所有内容。 Backbone使用jQuery delegate
事件管理器将通用事件处理程序附加到该常量引用。每当一个事件发生在该DOM元素或其任何子元素中时,该委托捕获该事件,同时引用创建该事件的父el
内的特定DOM对象,并且骨干使用一些相当标准的jQuery魔法将其映射到视图中的事件处理程序。
确实,它非常酷。
我应该补充一点,el
引用的“常量” - 是,呃,可论证。如果您要将视图逻辑附加到现有HTML元素,则会在视图的el
中分配initialize()
一次。 Javascript不强制执行任何常量概念,但如果您确定知道自己在做什么,则只应直接指定el
(即this.el = something()
)。