diff --git a/backbone.modelbinding.js b/backbone.modelbinding.js index 0161cd4..2469b18 100644 --- a/backbone.modelbinding.js +++ b/backbone.modelbinding.js @@ -238,7 +238,12 @@ var modelbinding = (function(Backbone, _, $) { var elementChange = function(ev){ var targetEl = view.$(ev.target); var value = targetEl.val(); - var text = targetEl.find(":selected").text(); + var selections = targetEl.find(":selected"); + if (selections.size() > 1) { + var text = _.map(selections, function(sel){ return sel.text }); + } else { + var text = selections.text(); + } setModelValue(attribute_name, value, text); }; diff --git a/spec/javascripts/helpers/sample.backbone.app.js b/spec/javascripts/helpers/sample.backbone.app.js index 8f9f734..d35d165 100644 --- a/spec/javascripts/helpers/sample.backbone.app.js +++ b/spec/javascripts/helpers/sample.backbone.app.js @@ -42,6 +42,10 @@ AView = Backbone.View.extend({ \ \ \ + \ \ \ \ diff --git a/spec/javascripts/selectboxConventionBindings.spec.js b/spec/javascripts/selectboxConventionBindings.spec.js index c95376e..d6dc886 100644 --- a/spec/javascripts/selectboxConventionBindings.spec.js +++ b/spec/javascripts/selectboxConventionBindings.spec.js @@ -46,6 +46,14 @@ describe("select element convention binding", function(){ expect(this.model.get('education_text')).toEqual("i dun learned at grade skool"); }); + + it("applies the text of multiple selections to the model", function(){ + var el = this.view.$("#multiple_select"); + el.val(["selection_1", "selection_2"]); + el.trigger('change'); + + expect(this.model.get('multiple_select_text')).toEqual(["Selection 1", "Selection 2"]); + }); it("updates the model to the selected value when the model is set to a value that doesn't exist, on render", function(){ var el = this.view.$("#operating_system");