Cascading使用Backbone.js选择元素

时间:2013-11-05 01:47:15

标签: javascript jquery backbone.js html-select

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

然而,当我尝试这个时,'deal'下拉列表总是空的。认为这可能是一个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:

更新venueSelectionChanged()以利用DropdownView,它根据集合创建窗口小部件。我可以在代码中看到正确创建HTML,但它不呈现。当我在MockSaleView的render()函数中测试View并且能够为MockSaleView传入this.el时,它将正确呈现。对不起,我还不熟悉Backbone的开发。

1 个答案:

答案 0 :(得分:0)

由于我使用的是bootstrap-selector插件,它会执行Select选项的渲染,因此在更新值后需要调用refresh。

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