Backbone.js视图中更灵活的tagName

Jim*_*uis 4 html jquery 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;
} 
Run Code Online (Sandbox Code Playgroud)

根本不工作.任何想法或任何其他方式围绕这个?我是否最好只使用选择多个标记创建一个新视图,然后将myListItemView对象附加到它?

谢谢一群,吉米

Der*_*ley 10

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


Backbone.View.extend({
  tagName: "select",
  attributes: {
    "multiple": "multiple"
  }
});
Run Code Online (Sandbox Code Playgroud)

  • 嘿,我已经多次读过文档和来源了,不知怎的,我仍然错过了这个. (2认同)

Edw*_*ith 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;
        }
    });
Run Code Online (Sandbox Code Playgroud)