Vous ne voulez probablement pas créer un nouvel éditeur de sélection pour chaque plage d'options. De plus, vous ne connaissez peut-être pas cette fourchette de valeur de l'option à l'avance.
Dans ce cas, vous souhaitez une gamme d'options flexible dans un éditeur de type select. Pour ce faire, vous pouvez ajouter une option supplémentaire à vos définitions de colonne (par exemple, appelées options) comme ceci:
var columns = [
{id:"color", name:"Color", field:"color", options: "Red,Green,Blue,Black,White", editor: SelectCellEditor},
{id:"lock", name:"Lock", field:"lock", options: "Locked,Unlocked", editor: SelectCellEditor}
]
et l'accès que l'utilisation args.column.options
dans la méthode d'initialisation de votre propre objet SelectEditor
comme ceci:
SelectCellEditor : function(args) {
var $select;
var defaultValue;
var scope = this;
this.init = function() {
if(args.column.options){
opt_values = args.column.options.split(',');
}else{
opt_values ="yes,no".split(',');
}
option_str = ""
for(i in opt_values){
v = opt_values[i];
option_str += "<OPTION value='"+v+"'>"+v+"</OPTION>";
}
$select = $("<SELECT tabIndex='0' class='editor-select'>"+ option_str +"</SELECT>");
$select.appendTo(args.container);
$select.focus();
};
this.destroy = function() {
$select.remove();
};
this.focus = function() {
$select.focus();
};
this.loadValue = function(item) {
defaultValue = item[args.column.field];
$select.val(defaultValue);
};
this.serializeValue = function() {
if(args.column.options){
return $select.val();
}else{
return ($select.val() == "yes");
}
};
this.applyValue = function(item,state) {
item[args.column.field] = state;
};
this.isValueChanged = function() {
return ($select.val() != defaultValue);
};
this.validate = function() {
return {
valid: true,
msg: null
};
};
this.init();
}
Merci qui est le genre de chose que je cherchais, suppose que je vais devoir le modifier et essayer de ajouter un paramètre aux colonnes de sorte que vous pouvez changer les colonnes à la volée. Semblable à ce que jqGrid a pour les listes de sélection atm. – Sam