Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Backbone.js视图中多次引用div_Javascript_Backbone.js_Refactoring - Fatal编程技术网

Javascript 在Backbone.js视图中多次引用div

Javascript 在Backbone.js视图中多次引用div,javascript,backbone.js,refactoring,Javascript,Backbone.js,Refactoring,我想知道最好的处理方法是什么。假设我在一个主干视图中的多个方法中引用了一个div,我不想每次都重新查询它 e、 g 引用它的首选方法是将其声明为对象吗?还是有更好的模式我不知道 e、 g 如果这是一种特殊情况,则在调用render时,可以获取对元素的引用: Backbone.View.extend({ render: function () { // do rendering stuff this.$overlay = this.$('#js-add-re

我想知道最好的处理方法是什么。假设我在一个主干视图中的多个方法中引用了一个div,我不想每次都重新查询它

e、 g

引用它的首选方法是将其声明为对象吗?还是有更好的模式我不知道

e、 g


如果这是一种特殊情况,则在调用
render
时,可以获取对元素的引用:

Backbone.View.extend({
    render: function () {
        // do rendering stuff
        this.$overlay = this.$('#js-add-review-overlay');
    },
    showReviewOverlay : function(evt) {
        $(evt.currentTarget).prepend(this.$overlay.show());
    }
});

出于某种原因,您不想使用
el
吗?@dbaseman覆盖只是页面中某个地方的一个隐藏div模板,我认为使用el只是用作我想捕获所有事件的div?也许我完全忽略了
el
的要点?为什么
这个。$
?jQuery对象
$
是gloabl。因为
这个。$
更安全。它的作用域是视图。它是类似
$(,this.el)
的别名。因为将查询范围限制为视图将节省搜索整个文档的时间:^)如果我有一个
render()
方法和一个
initialize()
方法,我会在initialize还是render?
onRender
中声明它。在呈现之前,选择器将返回
[]
Backbone.View.extend({
    overlay : { 'container' : $('#js-add-review-overlay') },

    showReviewOverlay : function(evt) {
        $(evt.currentTarget).prepend(this.container.overlay.show());
    }
    hideReviewOverlay : function(evt) {
        $(evt.currentTarget).closest(this.container.overlay.hide());
    }
});
Backbone.View.extend({
    render: function () {
        // do rendering stuff
        this.$overlay = this.$('#js-add-review-overlay');
    },
    showReviewOverlay : function(evt) {
        $(evt.currentTarget).prepend(this.$overlay.show());
    }
});