栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Backbone:为什么要将`$('#footer')`分配给`el`?[重复]

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Backbone:为什么要将`$('#footer')`分配给`el`?[重复]

$el
和之间有什么区别
el

el
视图属性

this.el
可以从DOM选择器字符串或Element解析;否则会从视图的创建
tagName
className
id

attributes
属性。如果未设置,
this.el
则为空
div
,通常就可以了。

它是一个DOM元素对象引用。
不要

el
直接设置,如果要更改它,请改用该
view.setElement
方法

$el
property

视图元素的缓存jQuery对象。一个方便的引用,而不是总是重新包装DOM元素。

 this.$el = $(this.el);

不要

$el
直接设置,使用
view.setElement
方法。

el
选项

一个

el
参考,也可以通过在该视图的构造函数。

new Backbone.View({ el: '#element' });new Backbone.View({ el: $('#element') }); // unecessary

它会覆盖该

el
属性,然后将该
$el
属性用于该属性。

如果传递了选择器字符串,则将其替换为其表示的DOM元素。

为什么要分配

$('#footer')
给el?

 _setElement: function(el) {   this.$el = el instanceof Backbone.$ ? el : Backbone.$(el);   this.el = this.$el[0]; },

这说明了为什么

this.$el
等同于
$(this.el)

但是什么

Backbone.$
呢?

骨干保持对任何事物的参考

$

出于Backbone的目的,jQuery,Zepto,Ender或My Library(玩笑)拥有该

$
变量。

在我们的例子中,

$
是jQuery,
Backbone.$
也是jQuery,但是Backbone依赖项很灵活:

Backbone唯一的硬依赖性是Underscore.js(>=1.8.3)。要使用Backbone.View实现RESTful持久性和DOM操作,请包括 jQuery(> =1.11.0)和json2.js,以支持较早的InternetExplorer。(类似Underscore和jQueryAPI的Lodash和Zepto等也可以在不同程度的兼容性下正常工作。)

this.$(selector)
相当于
$(view.el).find(selector)

事实上, 这是一个有点更有效

$
查看功能就是:

 $: function(selector) {   return this.$el.find(selector); },

什么是缓存的jQuery对象?

在这种情况下,这仅意味着jQuery对象保留在变量内,该变量在视图内被重用。它避免了

$(selector)
每次查找元素的昂贵操作。

您可以(并且应该)尽可能使用这种小的优化方式,例如在

render
函数内部:

render: function() {    this.$el.html(this.template());    // this is caching a jQuery object    this.$myCachedObject = this.$('.selector');},onExampleEvent: function(e) {    // avoids $('.selector') here and on any sub-sequent example events.    this.$myCachedObject.toggleClass('example');}

给jQuery缓存的对象变量加上前缀

$
只是一种标准,而不是必需的。


Backbone的源代码少于2000行,它有据可查且易于阅读。我强烈鼓励每个人都深入其中,以轻松理解基本逻辑。

他们还提供带注释的源页面 ,它甚至更易于阅读。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/432405.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号