2013-05-10 59 views
1

我目前正在构建一个大骨干应用程序,这里是我的问题。如何应对DOM元素引用最佳方式?现在,我只需查找将在未来访问的所有元素(表单和类似事件),并将它们绑定到视图本身。这样我就不必每次都需要与它们进行交互时搜索这些元素。但实际上这些参考文献的数量正在迅速增长。这是好方法还是我可以做得更好?感谢提前:)Backbone.js DOM元素引用方法

代码示例:

initialize: function() { 
    this.form1 = this.$el.find('.whatever'); 
    ... 
    ... 
} 
+1

是啊,我做同样的事情......你应该简化你的观点,如果你有太多的DOM元素每个视图的引用 – imrane 2013-05-10 15:32:34

回答

1

应用$use方法后.selector将被缓存。

HTML:

<div data-container> 
    <div data-something>smthng</div> 
</div> 

JS:

var View = Backbone.View.extend({ 
    el : '[data-container]', 
    ui : { 
     something : '[data-something]' 
    }, 
    someFn : function() { 
     this.$use(this.ui.something).css('background', '#999'); 
     return this; 
    }, 
    $use : function (selector) { 
     console.log(typeof this.ui[selector] === 'undefined' ? 'dom query' : 'already cached'); 
     var $selector = this.ui[selector] === selector ? 
      this.ui[selector] : 
      this.$(selector); 

     return this.ui[selector] = $selector; 
    } 
}); 

new View().someFn().someFn().someFn(); 

演示:http://jsfiddle.net/vpetrychuk/K7nmr/