我试图在select选项标记视图上强制'multiple'='multiple'属性,这是一个使用带有attr函数的jQuery选择器的Backbone视图,但我似乎无法使它工作。这是我的代码:
window.MyListView = Backbone.View.extend({
tagName:'select',
className: 'mySelect',
initialize:function () {
},
render:function (eventName) {
$(".mySelect").attr('multiple', 'multiple');
_.each(this.model.models, function (myModel) {
$(this.el).append(new MyListItemView({model:myModel}).render().el);
}, this);
return this;
}
根本不工作。任何想法或任何其他方式围绕这个?我是否最好只使用select multiple标签创建一个新视图,然后将myListItemView对象附加到它?
非常感谢, 麦
答案 0 :(得分:10)
您可以使用'attributes'属性为视图标记提供所需的任意属性:
Backbone.View.extend({
tagName: "select",
attributes: {
"multiple": "multiple"
}
});
答案 1 :(得分:9)
可能,这不起作用的原因是你的视图还没有附加到DOM,所以$(“。mySelect”)没有找到节点。
如果你想在视图中的节点上操作,例如render()
方法,你想使用视图的el
,那么Backbone中有几个帮助器可以做到这一点。
this.el
- 您的视图的根节点this.$el
- 视图根节点的jquery对象。this.$({some selector})
- 从根节点开始的jquery选择器。这些帮助程序将在视图节点连接到DOM之前工作(最常见的是首先创建视图的代码。
因此,添加多个属性的代码将是
window.MyListView = Backbone.View.extend({
tagName:'select',
className: 'mySelect',
initialize:function () {
},
render:function (eventName) {
this.$el.attr('multiple', 'multiple');
return this;
}
});
答案 2 :(得分:0)
选择'多个'问题现在已经解决但我已经尝试迭代使用this.collection.each(myItem)...正如Ed所建议的那样,它看起来比下划线更清晰,但即使项目是它不会渲染视图中的任何项目:
/*_.each(this.model.models, function (myModel) {
$(this.el).append(new MyListItemView({model:myModel}).render().el); }, this); */
this.collection.each(function(myItem){
console.log(myItem.id);
$(this.el).append(new MyListItemView({model:myItem}).render().el);
});
我去看MyListItemView中的参数状态,但它们都没问题。 有什么想法吗? 感谢