Backbone.js如何在不使用ID的情况下跟踪DOM元素?

时间:2011-09-01 18:07:37

标签: javascript jquery backbone.js

背景

我已经使用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这样做,并且想知道如何它做到了!

1 个答案:

答案 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())。

相关问题