Javascript 主干视图默认值$el

Javascript 主干视图默认值$el,javascript,jquery,backbone.js,backbone-views,Javascript,Jquery,Backbone.js,Backbone Views,我查找了将el动态分配给视图的正确方法, 根据这篇文章,我在创建视图时传递了el元素 var MyView = Backbone.View.extend({ initialize: function(options) { options = options || {}; this.$el = this.$el || $(".somediv ul"); } }); 然后我创建如下视图: // creating a view this way wo

我查找了将
el
动态分配给视图的正确方法, 根据这篇文章,我在创建视图时传递了
el
元素

var MyView = Backbone.View.extend({
    initialize: function(options) {
        options = options || {};

        this.$el = this.$el || $(".somediv ul");
    }
});
然后我创建如下视图:

// creating a view this way works fine.
this.myView= new MyView({
   'el': this.$('.someotherdiv ul')
});
这种视图创建方式的效果与预期一样。但是当我没有向它传递任何
el
值时,就会出现问题

//there is a problem though, If I create view like this: 
this.myView= new MyView();
view.el
没有设置为
$(“.somediv ul”)
而只是一个div标记


谁能告诉我动态分配
el
并为其设置默认值的正确方法是什么。

默认情况下,主干视图的
el
设置为空div。因此,
this.el
this.$el
始终存在

//there is a problem though, If I create view like this: 
this.myView= new MyView();
您可能可以尝试以下方法:

 initialize: function (options) {
     options = options || {};
     this.$el = options.el ? $(options.el) : $('.somediv ul');
 }
但通常我不会这么做。您正在将视图与页面上的“.somediv ul”元素耦合。:/

===================编辑==================

是的,有一个更简单的解决方案。(愚蠢的我)

在你看来:

  YourView = Backbone.View.extend({
    el: '.somediv ul',

    initialize: function () {
    }
  });

this.el
将被设置为
.somediv ul
,除非您传递另一个

不过,这似乎有点老套,看起来不自然。我认为有一种简单的方法可以设置默认值。为什么这比你的版本更粗糙?:)我的当然是黑客,因此如何改进它的问题是:P“通常我不会这样做”实际上应该是“我永远不会这样做,我会使用
setElement
”。是的,我考虑过taht.)
setElement
确保正确委派taht事件。为什么要动态设置
el
?不要把这当作批评,我想了解你的用例。我在视图定义中使用
el
,例如,对于绑定到的“根视图”或“应用程序视图”(例如,
body
),或者在实例化需要绑定到现有元素的装饰视图时用作参数。我从未遇到过在实例化之后需要设置
el
的情况。