Backbone.js视图中更灵活的tagName

时间:2012-04-28 22:49:31

标签: jquery html backbone.js

我试图在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对象附加到它?

非常感谢, 麦

3 个答案:

答案 0 :(得分:10)

您可以使用'attributes'属性为视图标记提供所需的任意属性:


Backbone.View.extend({
  tagName: "select",
  attributes: {
    "multiple": "multiple"
  }
});

答案 1 :(得分:9)

可能,这不起作用的原因是你的视图还没有附加到DOM,所以$(“。mySelect”)没有找到节点。

如果你想在视图中的节点上操作,例如render()方法,你想使用视图的el,那么Backbone中有几个帮助器可以做到这一点。

这些帮助程序将在视图节点连接到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中的参数状态,但它们都没问题。 有什么想法吗? 感谢