首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >backbone渲染不渲染select标签

backbone渲染不渲染select标签
EN

Stack Overflow用户
提问于 2012-11-14 11:12:11
回答 1查看 955关注 0票数 1

我有一个简单的div,我想让backbone从我的服务器上渲染一个select盒子和options

这些选项看起来呈现得很好,但选择框却不能。我确定这是一个简单的调整,但似乎找不到它。

我为它创建了一个简化的小提琴:http://jsfiddle.net/thunderrabbit/BNZY3/

HTML

代码语言:javascript
复制
<div id="where_fields"></div>

我使用的脚本使用fetch()来获取数据。上面的文件对数据进行了硬编码,但问题是相同的。

代码语言:javascript
复制
(function($){
    var Field = Backbone.Model.extend();

    var UnitFields = Backbone.Collection.extend({
        url: '/<?php echo CONFIG_ADMIN_DIR; ?>/api/fieldnames/units',
        model: Field
    });

    var BuildingFields = Backbone.Collection.extend({
        url: '/<?php echo CONFIG_ADMIN_DIR; ?>/api/fieldnames/buildings',
        model: Field
    });

    var FieldView = Backbone.View.extend({
        tagName: "option",

        initialize: function(){
            _.bindAll(this, 'render');
        },
        events: {
            "click":"clicked"
        },
        clicked: function(e) {
            var data_type = this.model.get("DATA_TYPE");
            if(data_type == "varchar") {
                console.log("it's a varchar");
            }
            if(data_type == "int") {
                console.log("it's an int");
            }

        },
        render: function(){
            $(this.el).attr('value', this.model.get('COLUMN_NAME')).html(this.model.get('display_name'));
            return this;
        }
    });

    var FieldsView = Backbone.View.extend({
        tagName: "select",
        el: $('#where_fields'),
        initialize: function(){
            _.bindAll(this, 'render', 'renderItem');
            this.collection.bind('reset', this.render);
        },
        renderItem: function(model) {
            console.log('rendr item');
            var fieldView = new FieldView({model:model});
            fieldView.render();
            $(this.el).append(fieldView.el);
        },
        render: function(){
            console.log('rendr');
            this.collection.each(this.renderItem);
            return this;
        }
    });

    var units_fields = new UnitFields();
    var buildings_fields = new BuildingFields();

    var unitsView = new FieldsView({collection: units_fields});
    var buildingsView = new FieldsView({collection: buildings_fields});

    units_fields.fetch();
    buildings_fields.fetch();

})(jQuery);

为什么我的backbone脚本不能呈现select标记?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-14 11:20:35

您的FieldsView类中既有tagName属性,也有el属性。你不需要两个都需要。如果您希望呈现一个与DOM分离的视图,然后backbone将使用该标记而不是默认的div,请使用tagName。然而,在您的render()中,实际上并没有涉及到select标记。$(this.el)是您的#where_fields目录,您只需附加fieldView.el,这是一个option元素。这就是为什么没有select元素的原因。一些小贴士:

  • 使用this.$el作为DOM的更有效的简写形式,以便使视图与DOM松散耦合,因此el: $('#where_fields')不像呈现从DOM分离的元素并让其他代码决定它应该附加到现有DOM中的确切位置那样简洁。
  • 因此您应该正确地删除el,如果愿意,将tagName设置为select,那么您的<代码>D23方法将执行您想要的操作,将<代码>D24附加到<代码>D25标记,然后移动实际的代码,将视图的呈现el附加到#where_fields目录中,从视图中移到路由器中。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13372451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档