我正在尝试使用名为的顶级选项填充dojox / form / checkedMultiSelect:'全部选择'。
一种方法是使用declare函数来改变' _addOptionItem'功能。
问题是这个' _addOptionItem' function正在使用一个名为:' formCheckedMultiSelectMenu Item '在CheckedMultiSelect'内部小部件,AND给出错误:' formCheckedMultiSelectMenuItem未定义'。
如何解决这个问题?
我的JS代码:
declare_CheckedMultiSelect: function(formCheckedMultiSelectItem){
return declare(CheckedMultiSelect, {
startup: function() {
this.inherited(arguments);
setTimeout(lang.hitch(this, function() {
this.dropDownButton.set("label", this.label);
}));
},
_addOptionItem: function(item){
var item;
if(this.dropDown){
item = new formCheckedMultiSelectMenuItem({
option: option,
parent: this.dropDownMenu
});
c(item)
this.dropDownMenu.addChild(item);
}else{
item = new formCheckedMultiSelectItem({
option: option,
parent: this
});
this.wrapperDiv.appendChild(item.domNode);
}
this.onAfterAddOptionItem(item, option);
}
});
}
答案 0 :(得分:2)
以下是您要尝试实现的工作原型http://jsfiddle.net/894af/750/,请随时提出任何跟进问题。它以不同的方式完成,但我只是做了:
1)创建mutliselect后,使用
创建每个复选框 onAfterAddOptionItem
2)听取全选复选框,然后覆盖onclick功能,然后根据复选框的选择更改所有复选框的选择。
if(option.value == "SA"){
on(item, "click", function(evt){
var optionsToSelect = checkedMultiSelect.getOptions();
for(var i = 0 ; i < optionsToSelect.length;i++){
if(optionsToSelect[i].value == "SA"){
if(optionsToSelect[i].selected){
checkedMultiSelect.set("value",optionsToSelect);
}else{
checkedMultiSelect.set("value",[]);
}
}
}
});
}