2

我刚刚开始了解骨干基础知识,不太了解这里发生了什么:

this.$input = this.$('#new-todo');

有人可以给我一个概述/细分这实际上是做什么的吗?

根据我有限的理解告诉我,this.$('#new-todo')这是一个典型的 jquery 选择器,它找到#new-todo(输入)并将其提供给this.$input,(根据this)是 $(this + 'input') 排序的简写,但这里是我把它弄丢了——为什么它真的在那里?真的只是将#new-todoDOM 分配给 $(this + 'input') 吗?如果是这样,使用 this.$('something') DOM 选择器而不是 this.$input 中的内容不是更好吗?

4

4 回答 4

3

代码示例正在缓存 jQuery 元素。

当您使用 jQuery 构造函数时,您正在查询 DOM;找到所有匹配的元素。根据您使用的选择器,这可能是一项非常昂贵的操作。

如果您计划多次使用 jQuery 对象,最好只查询 DOM 一次。

这是一个例子:

var foo = $('.someClass');
foo.css("background-color", "yellow");
console.log(foo.length + " items updated");

即使上面的代码foo多次使用,DOM 也只查询了一次。

如果您的代码使foojQuery 对象这一事实更加明显,那不是很好吗?

// a lot of developers like to prepend a $ to variable names
var $foo = $('.someClass'); 
于 2013-03-04T03:42:41.343 回答
1

Backbone.$委托给 jQuery(或 Zepto)。

在这种情况下this.$,将委托给 jQuery 并返回一个带有 id 的元素new-todo

this.$input是一个命名约定,表示它$input是一个 jQuery 对象。

this 对象指的是一个 Backbone 实例,而不是一个 DOM 上下文。

this.$ == jQuery

this.$input只是一个属性。

this.$input = this.$("#new-todo");可以改写为:

this.input = jQuery("#new-todo");或者

this.input = $("#new-todo");

$input只是一个任意命名的属性,就像变量可以命名为$foo等一样$bar

于 2013-03-04T03:42:14.057 回答
0

this.$input will be just an attribute to the object which this is pointing to.

And this.$('#new-todo') will find and return the matching element from the current view (element pointed by el for the view).

When we do this.$, according to the docs, the queries to get the element specified by the selector are scoped within the view's element (say el). Here is what scope means in jQuery, referred by context there.

Hence this.$('#new-todo') isn't same as jQuery('#new-todo').

于 2013-03-04T05:42:16.477 回答
0

我知道这并没有这样做,因为除非是字符串$(this + 'input'),否则这可能是无效的。this我不知道 Backbone,但它似乎this.$是 jQuery,所以this.$("#new-todo")在 Backbone 中与 相同jQuery('#new-todo'),它只是选择该元素。将它存储在一个名为的成员中$input允许您只调用一次 jQuery 选择器函数,并且它还允许您this.$input在其他方法中引用而无需知道原始选择器。

于 2013-03-04T02:48:35.273 回答