Spree.Views.Promotions.OptionValuesRuleRow = Backbone.View.extend({ optionValueTemplate: HandlebarsTemplates['promotions/rules/option_values'], events: { 'click .js-remove-promo-rule-option-value': 'onRemove', 'change .js-promo-rule-option-value-product-select': 'onSelectProduct' }, initialize: function(options) { this.productId = options.productId; this.values = options.values; this.paramPrefix = options.paramPrefix; }, render: function() { this.$el.html( this.optionValueTemplate({ productSelect: { value: this.productId }, optionValuesSelect: { value: this.values }, paramPrefix: this.paramPrefix }) ); this.$('.js-promo-rule-option-value-product-select').productAutocomplete({multiple: false}); // Note: This doesn't work. This always selects the first product select on the page. // optionValueAutocomplete also doesn't work, so this cancels out. this.$('.js-promo-rule-option-value-option-values-select').optionValueAutocomplete({productSelect: '.js-promo-rule-option-value-product-select'}) if(this.productId == null) { this.$('.js-promo-rule-option-value-option-values-select').prop('disabled', true); } }, onSelectProduct: function(e) { this.productId = this.$('input.js-promo-rule-option-value-product-select').val(); this.render(); }, onRemove: function(e) { this.remove(); }, }); Spree.Views.Promotions.OptionValuesRule = Backbone.View.extend({ initialize: function() { _.bindAll(this, 'addOptionValue') this.$optionValues = this.$('.js-promo-rule-option-values'); this.paramPrefix = this.$('.param-prefix').data('param-prefix'); var originalOptionValues = this.$optionValues.data('original-option-values') if ($.isEmptyObject(originalOptionValues)) { this.addOptionValue(null, null); } else { $.each(originalOptionValues, this.addOptionValue); } }, events: { 'click .js-add-promo-rule-option-value': 'onAdd' }, addOptionValue: function(product, values) { var row = new Spree.Views.Promotions.OptionValuesRuleRow({ productId: product, values: values, paramPrefix: this.paramPrefix }); this.$optionValues.append(row.el); row.render(); }, onAdd: function(e) { e.preventDefault(); this.addOptionValue(null, null); }, });