Javascript 为什么我要把$el锁起来
目前我正在深入研究Backbone.js,我想知道为什么我在创建我的Javascript 为什么我要把$el锁起来,javascript,backbone.js,Javascript,Backbone.js,目前我正在深入研究Backbone.js,我想知道为什么我在创建我的列表项视图的新实例时必须链接$el(在render()之后) // autoCompleteView.js /** * Create a new instance of {listItem} and * append it to result list. * * @param item * @see listItem * @private *
列表项视图的新实例时必须链接$el
(在render()之后)
// autoCompleteView.js
/**
* Create a new instance of {listItem} and
* append it to result list.
*
* @param item
* @see listItem
* @private
*/
_addResultListItem: function (item) {
this.$el.append(
new this.listItem({
model: item,
parent: this
}).render().$el
);
}
更新:
渲染方法
项目视图
log(新的this.listItem({model:item,parent:this}).render());
el
和$el
(jQuery-wrapped-el)是视图表示的DOM元素
渲染时,将输出插入/附加到这些元素
经常使用的视图。$el.append(otherView.render().$el)
源于约定(在许多示例中使用),即render在包含所需内容之前返回视图本身以及需要渲染的视图
无需将其链接,您也可以将其分成两条语句otherView.render()
和view.$el.append(otherView.el)
el
和$el
(jQuery-wrapped-el)是视图表示的DOM元素
渲染时,将输出插入/附加到这些元素
经常使用的视图。$el.append(otherView.render().$el)
源于约定(在许多示例中使用),即render在包含所需内容之前返回视图本身以及需要渲染的视图
无需将其链接,您也可以将其分为两条语句otherView.render()
和view.$el.append(otherView.$el)
链接$el
,这样做没有太大意义(它只是引用jQuery对象)。你的渲染功能是什么样子的?@m90查看我更新的问题。也许这是我嵌套视图的问题?!谢谢你的努力!我创建了日志窗口的屏幕截图。它似乎返回了模型..好的,我明白了,现在发生的是$el
引用了视图的jQuery包装版本(通过调用render()
返回)。因此,为了使用append()
,您需要指定视图的el
或$el
.Hrmmm,这听起来很明显。请添加您的评论作为答案,以便我可以接受!非常感谢。像这样链接$el
并没有太大意义(它只是指一个jQuery对象)。你的渲染功能是什么样子的?@m90查看我更新的问题。也许这是我嵌套视图的问题?!谢谢你的努力!我创建了日志窗口的屏幕截图。它似乎返回了模型..好的,我明白了,现在发生的是$el
引用了视图的jQuery包装版本(通过调用render()
返回)。因此,为了使用append()
,您需要指定视图的el
或$el
.Hrmmm,这听起来很明显。请添加您的评论作为答案,以便我可以接受!非常感谢。
// autoCompleteView.js
render: function () {
// bind events
this.input
.keyup(this.keyup.bind(this))
.keydown(this.keydown.bind(this))
.after(this.$el);
return this;
}
// autoCompleteItemView.js
var AutoCompleteItemView = Backbone.View.extend({
tagName: "li",
events: {
"click": "select"
},
render: function () {
this.$el.append( Mustache.to_html( Template, this.model.toJSON() ) );
return this;
},
select: function () {
this.options.parent.hide().select(this.model);
return false;
}
});
return AutoCompleteItemView;