view.$el and $(view.el)
你能告诉我view.$el
和$(view.el)
之间有什么区别。我关注一些网站,但我找不到精心解答的答案。如果解决这个问题,那将会非常有帮助。我是bacbone的新手。
答案 0 :(得分:1)
跟踪Backbone.View的源代码可能会帮助您找出$(view.el)和view。$ el之间的区别。当您创建Backbone View的新实例时,将调用setElement函数。
setElement: function(element, delegate) {
if (this.$el) this.undelegateEvents();
this.$el = element instanceof Backbone.$ ? element : Backbone.$(element);
this.el = this.$el[0];
if (delegate !== false) this.delegateEvents();
return this;
},
Backbone会将DOM或选择器字符串转换为jQuery对象(如果需要)并将其分配给此。$ el here。
this.$el = element instanceof Backbone.$ ? element : Backbone.$(element);
然后将DOM元素分配给this.el
this.el = this.$el[0];
jQuery程序员通常定义一个以美元符号开头的jquery对象变量。它带来了一些好处:
易于识别(我们无法在DOM元素上调用find())
表现提升: 当我们想要缓存jquery选择结果时,我们总是创建一个jQuery对象变量(避免在DOM树中重新选择或重新包装DOM)。重新选择或重新包装DOM可能会导致性能问题。特别是你有一个巨大而复杂的DOM结构。
//re-selecting
$("#test").click(function(){
//event hanlder
});
$("#test").addClass("viewed");
//re-wrapping
var dom = getElementById("test");
$(dom).find(".anchor").removeClass("viewed");
$(dom).click(function(){
//event hanlder
});
那么...视图。$ el和$(view.el)之间有什么区别? $(view.el)再次重新包装视图的DOM元素,我认为你可以直接使用view。$ el。
答案 1 :(得分:1)
Chickenrice已经回答了你的问题,但我想补充50美分。
我建议您避免使用$(whatever)
并使用view.$(whatever)
。这种方法有助于避免观点之间的冲突。
$(whatever)
- 搜索document
元素,以便您可以错误地修改视图外的元素view.$(whatever)
- 在当前视图中搜索答案 2 :(得分:0)
他们在功能上是一样的。第一个更好,因为你不需要每次都将它包装在jQuery对象中。