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
的情况。