4

我试图在选择选项标签视图上强制使用 '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;
} 

根本不工作。有什么想法或任何其他方法吗?我会更好地创建一个只有一个选择多个标签的新视图,然后将 myListItemView 对象附加到它上面吗?

非常感谢,吉米

4

3 回答 3

10

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


Backbone.View.extend({
  tagName: "select",
  attributes: {
    "multiple": "multiple"
  }
});
于 2012-04-28T23:34:44.117 回答
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;
        }
    });
于 2012-04-28T23:01:06.667 回答
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 中参数的状态,但它们都很好。有什么想法吗?谢谢

于 2012-04-29T07:39:24.723 回答