骨干中(view。$ el和$(view.el))之间的区别

时间:2014-04-21 05:44:49

标签: javascript backbone.js

view.$el and $(view.el) 

你能告诉我view.$el$(view.el)之间有什么区别。我关注一些网站,但我找不到精心解答的答案。如果解决这个问题,那将会非常有帮助。我是bacbone的新手。

3 个答案:

答案 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对象变量。它带来了一些好处:

  1. 易于识别(我们无法在DOM元素上调用find())

  2. 表现提升: 当我们想要缓存jquery选择结果时,我们总是创建一个jQuery对象变量(避免在DOM树中重新选择或重新包装DOM)。重新选择或重新包装DOM可能会导致性能问题。特别是你有一个巨大而复杂的DOM结构。


  3. //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对象中。

http://backbonejs.org/#View-$el