Improvise the Select2Cell
Select2 does not allow to scroll any of the parent container once it was opened, and if it was not properly closed. Also, resolved an issue - existing selection was not working, while re-rendering the Select2Cell.pull/3/head
parent
7b344185b4
commit
af680b724d
|
@ -398,14 +398,15 @@
|
||||||
defaults: _.defaults({
|
defaults: _.defaults({
|
||||||
select2: {},
|
select2: {},
|
||||||
opt: {
|
opt: {
|
||||||
text: null,
|
label: null,
|
||||||
value: null,
|
value: null,
|
||||||
selected: false
|
selected: false
|
||||||
}
|
}
|
||||||
}, Backgrid.SelectCell.prototype.defaults),
|
}, Backgrid.SelectCell.prototype.defaults),
|
||||||
|
|
||||||
enterEditMode: function() {
|
enterEditMode: function() {
|
||||||
this.$el.addClass('editor');
|
if (!this.$el.hasClass('editor'))
|
||||||
|
this.$el.addClass('editor');
|
||||||
this.$select.select2('focus');
|
this.$select.select2('focus');
|
||||||
this.$select.on('blur', this.exitEditMode);
|
this.$select.on('blur', this.exitEditMode);
|
||||||
},
|
},
|
||||||
|
@ -413,10 +414,11 @@
|
||||||
exitEditMode: function() {
|
exitEditMode: function() {
|
||||||
this.$select.off('blur', this.exitEditMode);
|
this.$select.off('blur', this.exitEditMode);
|
||||||
this.$el.removeClass('editor');
|
this.$el.removeClass('editor');
|
||||||
this.$select.select2('blur');
|
|
||||||
},
|
},
|
||||||
|
|
||||||
events: {
|
events: {
|
||||||
|
"select2:open": "enterEditMode",
|
||||||
|
"select2:close": "exitEditMode",
|
||||||
"change": "onSave",
|
"change": "onSave",
|
||||||
"select2:unselect": "onSave"
|
"select2:unselect": "onSave"
|
||||||
},
|
},
|
||||||
|
@ -424,7 +426,7 @@
|
||||||
template: _.template([
|
template: _.template([
|
||||||
'<option value="<%- value %>" ',
|
'<option value="<%- value %>" ',
|
||||||
'<%= selected ? \'selected="selected"\' : "" %>>',
|
'<%= selected ? \'selected="selected"\' : "" %>>',
|
||||||
'<%- text %></option>'].join(''),
|
'<%- label %></option>'].join(''),
|
||||||
null,{
|
null,{
|
||||||
variable: null
|
variable: null
|
||||||
}),
|
}),
|
||||||
|
@ -432,6 +434,8 @@
|
||||||
initialize: function() {
|
initialize: function() {
|
||||||
Backgrid.SelectCell.prototype.initialize.apply(this, arguments);
|
Backgrid.SelectCell.prototype.initialize.apply(this, arguments);
|
||||||
this.onSave = this.onSave.bind(this);
|
this.onSave = this.onSave.bind(this);
|
||||||
|
this.enterEditMode = this.enterEditMode.bind(this);
|
||||||
|
this.exitEditMode = this.exitEditMode.bind(this);
|
||||||
},
|
},
|
||||||
|
|
||||||
render: function () {
|
render: function () {
|
||||||
|
@ -447,7 +451,6 @@
|
||||||
|
|
||||||
if (this.$select) {
|
if (this.$select) {
|
||||||
this.$select.select2('destroy');
|
this.$select.select2('destroy');
|
||||||
this.$select.off('change', this.onSave);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this.$el.empty();
|
this.$el.empty();
|
||||||
|
@ -467,30 +470,29 @@
|
||||||
selectedValues = model.get(this.column.get("name"));
|
selectedValues = model.get(this.column.get("name"));
|
||||||
|
|
||||||
delete this.$select;
|
delete this.$select;
|
||||||
|
self = this,
|
||||||
selectedValues = model.get(this.column.get("name")),
|
$select = self.$select = $('<select></select>').appendTo(this.$el);
|
||||||
self = this,
|
|
||||||
$select = self.$select = $('<select></select>').appendTo(this.$el);
|
|
||||||
|
|
||||||
for (var i = 0; i < optionValues.length; i++) {
|
for (var i = 0; i < optionValues.length; i++) {
|
||||||
var opt = optionValues[i];
|
var opt = optionValues[i];
|
||||||
|
|
||||||
if (_.isArray(opt)) {
|
if (_.isArray(opt)) {
|
||||||
|
|
||||||
optionText = opt[0];
|
optionText = opt[0];
|
||||||
optionValue = opt[1];
|
optionValue = opt[1];
|
||||||
|
|
||||||
$select.append(
|
$select.append(
|
||||||
self.template({
|
self.template({
|
||||||
text: optionText,
|
label: optionText,
|
||||||
value: optionValue,
|
value: optionValue,
|
||||||
selected: (selectedValues == optionValue) ||
|
selected: (selectedValues == optionValue) ||
|
||||||
(_.indexOf(selectedValues, optionValue) > -1)
|
(_.indexOf(selectedValues, optionValue) > -1)
|
||||||
}));
|
}));
|
||||||
} else {
|
} else {
|
||||||
opt = _.defaults(opt, {
|
opt = _.defaults({}, opt, {
|
||||||
selected: ((selectedValues == opt.value) ||
|
selected: ((selectedValues == opt.value) ||
|
||||||
(_.indexOf(selectedValues, opt.value) > -1))
|
(_.indexOf(selectedValues, opt.value) > -1)),
|
||||||
}, self.defaults.opt);
|
}, self.defaults.opt);
|
||||||
$select.append(self.template(opt));
|
$select.append(self.template(opt));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -508,11 +510,11 @@
|
||||||
_.extend(select2_opts, {disabled: !editable});
|
_.extend(select2_opts, {disabled: !editable});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialize select2 control.
|
|
||||||
this.$select.select2(select2_opts).on('change', self.onSave);
|
|
||||||
|
|
||||||
this.delegateEvents();
|
this.delegateEvents();
|
||||||
|
|
||||||
|
// Initialize select2 control.
|
||||||
|
this.$select.select2(select2_opts);
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue