繁体   English   中英

使用Backbone.js级联选择元素

[英]Cascading Select elements with Backbone.js

我的应用程序中有一个向导视图,可引导用户浏览一系列简短的屏幕,最终创建一个用于测试/演示目的的模拟销售。 当用户从下拉框中选择一个场所时,我想使用该场所的交易来渲染另一个下拉列表。

但是,当我尝试此操作时,“交易”下拉菜单始终为空。 考虑到这可能是render()问题,因此我选择插入代码以显示选择场所后的交易数量,并且效果很好。

MockSaleView.html

<select id="venue-select" class="selectpicker" data-live-search="true"></select><br/>
<select id="deal-select" class="selectpicker"></select><br/>
<div id ="deal-count"></div>

MockSaleView.js

window.MockSaleView = Backbone.View.extend({

    initialize: function () {
        this.render();
    },

    render: function () {
        this.$el.html(this.template());

        for (var i = 0; i < venues_collection.length; i++) {
            $('#venue-select', this.el).append('<option value="'+venues_collection.models[i].toJSON()._id+'">'+venues_collection.models[i].toJSON().name+'</option>');
        }

        // Events
        $('#venue-select', this.el).on("change", this.venueSelectionChanged);
        $('#deal-select', this.el).on("change", this.dealSelectionChanged);

        return this;
    },

venueSelectionChanged: function(e){

    var field = $(e.currentTarget);
    var venue_id = $("option:selected", field).val();

    var _deals = deals_collection.where({venue: venue_id});
    $('#deal-count').html(deals.length+' deals');

    var dropdown = new DropdownView({
        el: $('#deal-select'),

        model: new Backbone.Model({
          deals: _deals
        })
    });
    dropdown.render();
},

});

更新#1:

更新了placementSelectionChanged(),以利用一个DropdownView来基于集合创建一个小部件。 我可以在代码中看到正确创建HTML的位置,但无法呈现。 当我在MockSaleView的render()函数中测试视图并能够将this.el传递给MockSaleView时,它将正确呈现。 抱歉,对于Backbone来说,我仍然是新手。

由于我使用的是引导程序选择器插件,因此它会渲染Select选项,因此有必要在更新值之后调用refresh。

$('#deal-select').selectpicker('refresh');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM