Javascript 使用Backbone.js级联选择元素

Javascript 使用Backbone.js级联选择元素,javascript,jquery,backbone.js,html-select,Javascript,Jquery,Backbone.js,Html Select,我的应用程序中有一个向导视图,引导用户通过一系列短屏幕,最终创建一个模拟销售,用于测试/演示。当用户从下拉框中选择一个场地时,我希望呈现另一个包含该场地交易的下拉列表 但是,当我尝试此操作时,“交易”下拉列表总是空的。考虑到这可能是一个渲染问题,我输入了代码,在选择场地时显示交易数量,效果很好 MockSaleView.html <select id="venue-select" class="selectpicker" data-live-search="true"></se

我的应用程序中有一个向导视图,引导用户通过一系列短屏幕,最终创建一个模拟销售,用于测试/演示。当用户从下拉框中选择一个场地时,我希望呈现另一个包含该场地交易的下拉列表

但是,当我尝试此操作时,“交易”下拉列表总是空的。考虑到这可能是一个渲染问题,我输入了代码,在选择场地时显示交易数量,效果很好

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:


更新的venueSelectionChanged利用了DropdownView,该视图基于集合创建小部件。我可以在代码中看到HTML是正确创建的,但它没有呈现。当我在MockSaleView的render函数中测试视图时,我能够为MockSaleView传入this.el,它将正确渲染。很抱歉,我还不熟悉主干网的开发。

因为我使用的是引导选择器插件,它会呈现Select选项,因此有必要在更新值后调用refresh

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

您从哪里获得deals系列的价值?它们是手动填充的还是来自REST服务?在jsfiddle.net或jsbin.com上进行功能演示如何?代码中可能有我们看不到的东西。还有,你为什么要做$'venture-select',this.el.onchange。。。而不是使用视图的事件?为什么$'venture-select',this.el而不是更为惯用的this.$'venture-select'?@eggward通过REST服务填充集合,并且在选择场地时(例如3笔交易或0笔交易)会适当填充交易计数。换言之,deals_系列和where似乎也很好用。我只是无法让darn下拉列表包含任何选项。@mu我将尝试在JSFIDLE上获得一些功能。我尝试在视图上设置事件,但它们从未被触发。可能我做得不对。我怀疑在附加新选项$'deal-select'时,DOM$'deal-select'=[]中不存在deal select。附加。。。