2024-10-10
This commit is contained in:
121
web/bsadmin/assets/js/lib/jsgrid/fields/jsgrid.field.select.js
Normal file
121
web/bsadmin/assets/js/lib/jsgrid/fields/jsgrid.field.select.js
Normal file
@@ -0,0 +1,121 @@
|
||||
(function(jsGrid, $, undefined) {
|
||||
|
||||
var NumberField = jsGrid.NumberField;
|
||||
var numberValueType = "number";
|
||||
var stringValueType = "string";
|
||||
|
||||
function SelectField(config) {
|
||||
this.items = [];
|
||||
this.selectedIndex = -1;
|
||||
this.valueField = "";
|
||||
this.textField = "";
|
||||
|
||||
if(config.valueField && config.items.length) {
|
||||
var firstItemValue = config.items[0][config.valueField];
|
||||
this.valueType = (typeof firstItemValue) === numberValueType ? numberValueType : stringValueType;
|
||||
}
|
||||
|
||||
this.sorter = this.valueType;
|
||||
|
||||
NumberField.call(this, config);
|
||||
}
|
||||
|
||||
SelectField.prototype = new NumberField({
|
||||
|
||||
align: "center",
|
||||
valueType: numberValueType,
|
||||
|
||||
itemTemplate: function(value) {
|
||||
var items = this.items,
|
||||
valueField = this.valueField,
|
||||
textField = this.textField,
|
||||
resultItem;
|
||||
|
||||
if(valueField) {
|
||||
resultItem = $.grep(items, function(item, index) {
|
||||
return item[valueField] === value;
|
||||
})[0] || {};
|
||||
}
|
||||
else {
|
||||
resultItem = items[value];
|
||||
}
|
||||
|
||||
var result = (textField ? resultItem[textField] : resultItem);
|
||||
|
||||
return (result === undefined || result === null) ? "" : result;
|
||||
},
|
||||
|
||||
filterTemplate: function() {
|
||||
if(!this.filtering)
|
||||
return "";
|
||||
|
||||
var grid = this._grid,
|
||||
$result = this.filterControl = this._createSelect();
|
||||
|
||||
if(this.autosearch) {
|
||||
$result.on("change", function(e) {
|
||||
grid.search();
|
||||
});
|
||||
}
|
||||
|
||||
return $result;
|
||||
},
|
||||
|
||||
insertTemplate: function() {
|
||||
if(!this.inserting)
|
||||
return "";
|
||||
|
||||
return this.insertControl = this._createSelect();
|
||||
},
|
||||
|
||||
editTemplate: function(value) {
|
||||
if(!this.editing)
|
||||
return this.itemTemplate.apply(this, arguments);
|
||||
|
||||
var $result = this.editControl = this._createSelect();
|
||||
(value !== undefined) && $result.val(value);
|
||||
return $result;
|
||||
},
|
||||
|
||||
filterValue: function() {
|
||||
var val = this.filterControl.val();
|
||||
return this.valueType === numberValueType ? parseInt(val || 0, 10) : val;
|
||||
},
|
||||
|
||||
insertValue: function() {
|
||||
var val = this.insertControl.val();
|
||||
return this.valueType === numberValueType ? parseInt(val || 0, 10) : val;
|
||||
},
|
||||
|
||||
editValue: function() {
|
||||
var val = this.editControl.val();
|
||||
return this.valueType === numberValueType ? parseInt(val || 0, 10) : val;
|
||||
},
|
||||
|
||||
_createSelect: function() {
|
||||
var $result = $("<select>"),
|
||||
valueField = this.valueField,
|
||||
textField = this.textField,
|
||||
selectedIndex = this.selectedIndex;
|
||||
|
||||
$.each(this.items, function(index, item) {
|
||||
var value = valueField ? item[valueField] : index,
|
||||
text = textField ? item[textField] : item;
|
||||
|
||||
var $option = $("<option>")
|
||||
.attr("value", value)
|
||||
.text(text)
|
||||
.appendTo($result);
|
||||
|
||||
$option.prop("selected", (selectedIndex === index));
|
||||
});
|
||||
|
||||
$result.prop("disabled", !!this.readOnly);
|
||||
|
||||
return $result;
|
||||
}
|
||||
});
|
||||
|
||||
jsGrid.fields.select = jsGrid.SelectField = SelectField;
|
||||
|
||||
}(jsGrid, jQuery));
|
||||
Reference in New Issue
Block a user