/**
* Created by seeker910 on 2017/8/23.
*
* 下拉框 checkbox 多选
*/
Rsd.define('Rsd.form.MulitiSelect', {
extend: 'Rsd.form.Input',
xtype:'mulitiselect',
cls:'x-control-mulitiselect',
textMember:'text',
valueMember:'value',
readOnly:true,
listeners:{
'blur':{
element:'ctrl',
fn:function (sender,event) {
var me = this;
var _box = this.dropdownBox;
//blur 事件在 click事件先发生,所以延时处理关闭
setTimeout(function(){
//console.log(_box.cancelClose);
//关闭被阻止
if(!_box.cancelClose)
{
me.closeDropdownBox();
}
_box.cancelClose = false;
},500);
return true;
}
},
/*
'click':{
element:'ctrl',
fn:function (sender,event) {
var me = this;
var _style = {};
var _left = ((me.label.width ? me.label.width : me.label.element.clientWidth) + 10);
_style.marginLeft = _left + 'px';
_style.marginTop = (me.height - parseInt(me.dom.style.marginBottom)) + 'px';
_style.tabIndex = me.tabIndex;
_style.width = (me.width - _left - parseInt(me.dom.style.marginLeft) - parseInt(me.dom.style.marginRight)) + 'px';
//me.showDropdownBox(null,_style);
event.isCancel = true;
return false;
}
},
*/
'focus':{
element:'ctrl',
fn:function (sender,event) {
var me = this;
var _style = {};
var _left = ((me.label.width ? me.label.width : me.label.element.clientWidth) + 10);
_style.marginLeft = _left + 'px';
_style.marginTop = (me.height - parseInt(me.dom.style.marginBottom)) + 'px';
_style.tabIndex = me.tabIndex;
_style.width = (me.width - _left -parseInt(me.dom.style.marginLeft) - parseInt(me.dom.style.marginRight)) + 'px';
me.showDropdownBox(null,_style);
return false;
}
},
'keyup':{
element:'ctrl',
fn:function (sender,event) {
var me = this;
if (event.code == 'Enter')
{
me.closeDropdownBox();
}
if (event.code == 'Escape')
{
me.closeDropdownBox();
}
if (event.code == 'ArrowUp')
{
}
if (event.code == 'ArrowDown')
{
}
}
}
},
/**
数据源
*/
dataSource:null,
/**
* */
constructor: function MulitiSelect (config) {
this.apply(config||{});
},
/**
*
* */
onAfterInit:function onAfterInit() {
var me = this;
this.callParent();
this.ctrl.element.readOnly = true;
//初始化
this.initDropdownBox(
{
minWidth:'100px',
minHeight:'50px',
maxHeight:'300px',
overflowY:'auto'
},'x-box','');
setTimeout(function () {
me.loadData(me.dataSource);
},10);
},
/**
*可通过 重写该方法,定制多选框
*
* */
loadData:function loadData(data) {
var me = this;
me.dataSource = data ||[];
var list = me.dataSource;
Rsd.empty(me.dropdownBox);
for (var i in list) {
var li = document.createElement('li');
li.style.lineHeight = '25px';
li.tag = list[i];
li.id = list[i][me.valueMember];
li.onclick = function (evt) {
this.childNodes[0].checked = !this.childNodes[0].checked ;
this.tag['IsChecked'] = this.childNodes[0].checked;
me.ctrl.element.value = me.getText();
//根据事件注册规则,返回flase 不移除注册方法
return false;
}
var chk = document.createElement('input');
chk.type = 'checkbox';
chk.style.pointerEvents = 'none';
li.appendChild(chk);
li.appendChild(document.createTextNode(list[i][me.textMember]));
me.dropdownBox.appendChild(li);
}
},
/**
*
* */
getValue:function getValue() {
var _temp = [];
var list = Rsd.select(this.dropdownBox,'li');
for(var i in list)
{
if(list[i].tag && list[i].tag['IsChecked'])
{
_temp.push(list[i].tag[this.valueMember]);
}
}
this.__value = _temp;
//console.log(_temp);
return this.__value ;
},
/**
*
* */
getText:function getText() {
var _temp = [];
var list = Rsd.select(this.dropdownBox,'li');
for(var i in list)
{
if(list[i].tag && list[i].tag['IsChecked'])
{
_temp.push(list[i].tag[this.textMember]);
}
}
return _temp.join(',');
},
/**
* 参数 value 格式:逗号分隔在字符串 或 item 的 value值数据组
* */
setValue:function setValue(value) {
var _value = value || null;
if(Rsd.isString(_value)) {
_value = _value.split(',');
}
if(Rsd.isArray(_value))
{
//设置li 被选中
var list = Rsd.select(this.dropdownBox,'li');
for(var i in list)
{
list[i].tag["IsChecked"] = _value.indexOf(list[i].id)>-1
}
}
this.ctrl.element.value = this.getText();
this.__value = _value;
},
/**
*
* */
makeControl:function makeContrl(config,row) {
//debugger;
var me = this;
var _config = config ||{};
var _editable = _config.editable;
var _value = row[_config.dataIndex || _config.dataindex || _config.name];
var _valueMember = _config.valueMember || 'value';
var _textMember = _config.textMember || 'text';
var _colorMember = _config.colorMember || 'color';
var _ctrl = null;
if(_editable)
{
_ctrl = document.createElement('label');
_ctrl.appendChild(document.createTextNode("Error:ComboBoxEx编辑模式未实现"));
}
else
{
_ctrl = document.createElement('a');
_ctrl.setAttribute("value", _value);
_ctrl.href="javascript:void(0);";
_ctrl.onclick = function () {
me.funApplyByIOC(config.viewHandler,[_value]);
}
_ctrl.style.position = 'relative';
_ctrl.style.width = '100%';
_ctrl.style.height = '100%';
var _fn = function (text) {
_ctrl.appendChild(document.createTextNode(text));
}
me.funApplyByIOC(config.searchHandler,[_value,_fn]);
}
return [_ctrl];
}
},function (type) {
});