Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery Backbone.js视图中更灵活的标记名_Jquery_Html_Backbone.js - Fatal编程技术网

Jquery Backbone.js视图中更灵活的标记名

Jquery Backbone.js视图中更灵活的标记名,jquery,html,backbone.js,Jquery,Html,Backbone.js,我试图在选择选项标记视图上强制使用'multiple'='multiple'属性,这是一个使用jQuery选择器和attr函数的主干视图,但我似乎无法使其工作。这是我的密码: window.MyListView = Backbone.View.extend({ tagName:'select', className: 'mySelect', initialize:function () { }, render:function (eventName) { $(".mySel

我试图在选择选项标记视图上强制使用'multiple'='multiple'属性,这是一个使用jQuery选择器和attr函数的主干视图,但我似乎无法使其工作。这是我的密码:

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;
} 
根本不工作。有什么想法或其他方法吗?我是否最好只创建一个带有selectmultiple标记的新视图,然后将myListItemView对象附加到该视图中

非常感谢,
Jimmy

很可能,这不起作用的原因是您的视图尚未连接到DOM,因此$(“.mySelect”)找不到节点

例如,在使用
render()
方法的过程中,如果要对视图中的节点进行操作,则需要使用视图的
el
,主干中有两个帮助程序可以完成此操作

  • -视图的根节点
  • -视图根节点的jquery对象
  • -从根节点开始的jquery选择器
在将视图的节点连接到DOM之前(最常见的情况是通过首先创建视图的代码),该助手将处理这些节点

因此,您的代码添加多属性

    window.MyListView = Backbone.View.extend({

        tagName:'select',
        className: 'mySelect',

        initialize:function () {
        },

        render:function (eventName) {
            this.$el.attr('multiple', 'multiple');
            return this;
        }
    });

您可以使用“属性”属性为视图的标记提供任意属性:


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

选择“多个”问题现在已解决,但我已尝试使用此.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中查看了参数的状态,但它们都没有问题。 有什么想法吗?
谢谢

Heh,我已经阅读了很多次文档和资料来源,不知怎么的,我还是错过了这个。谢谢德里克,谢谢埃德,谢谢你的回复,我学到了很多。