Source: form/TextFK.js

/*
 * redmicro all Copyright (c) 
 * Created by seeker910 on 2015/6/30.
 * 外键字段输入
 */
Rsd.define('Rsd.form.TextFK', {
    extend: 'Rsd.form.Text',
    requires:[],
    xtype: 'text-fk',
    border:false, 
    selector:{},
    
    /** 
    * 
    */
    constructor: function TextFK (config) {
     
        this.apply(config||{}); 
    },
    /**
     * 
     */
    onAfterInit:function onAfterInit()
    {
        this.callParent();
        this.ctrl.element.readOnly = true;
    },
     /**
     *
     * */
    setValue:function setValue(value) {

        var me =this;
        me.__value = value ;
        if(me.ctrl.element)
        {
           
            if(Rsd.app.indexedDb)
            {
                Rsd.app.indexedDb.getObjectByKey(me.selector.modelType,value,function(obj){
                    
                    if(obj)
                    {
                        me.ctrl.element.value = obj[me.selector.textMember];
                    }
                    else
                    {
                        me.ctrl.element.value = value;
                    }
                });
                
                
            }
            else
            {
               me.ctrl.element.value = value;
               console.error("启动时 Rsd.app.indexedDb 未初始化");
            }    
        }
        
    },
     /**
     *
     * */
    getValue:function getValue() {

        return this.__value;
    },
    /**
     * 
     */
    btn_show_selector:function btn_show_selector()
    { 
        if(this.readOnly)
        {
            return;
        }
        if(Rsd.isEmpty(this.selector.modelType))
        {
            console.error("控件Rsd.form.TextFK属性selector.modelType为空。");
        }
       
        var cols = Rsd.arrayConcat([{text:'选择',xtype:'checkbox',align:'center',dataIndex:'_sel_'+this.selector.keyMember,editable:true,multiple:this.selector.multiple}],this.selector.gridColumns||[]);
         
        var me = this;
        if(Rsd.isEmpty(this.selector.viewerType))
        {
            Rsd.showMessage('该控件selector属性未找到viewerType的值。');
            return;
        }

        Rsd.create(this.selector.viewerType,{
            readOnly:true,
            autoLoad:true,
            title:this.selector.title,
            modelType:this.selector.modelType,
            where:this.selector.where,
            sort:this.selector.sort,
            gridColumns:cols,
            width:this.selector.width||800,
            height:this.selector.height||600,
            buttons: [
                {
                text:' 确 定 ',
                width:120,
                handler:function(rows,btn){
                        for(var i in rows)
                        {
                            var row = rows[i];
                            if(row['_sel_'+me.selector.keyMember])
                            { 
                                if(me.selector.multiple)
                                {
                                   
                                }
                                else
                                { 
                                    me.setValue(row[me.selector.keyMember]);
                                    me.ctrl.element.value = row[me.selector.textMember]||'-';
                                    break
                                }
                            }
                        }
                        //console.log(me.getValue());
                        btn.parent.close();
                    }
                }
            ],
            parent:this,
            footBar:{xtype:'container',height:40,width:'100%',border:true},
            showItem:function(){}

        }).showDialog();
    },
    /*
     * 返回 对象或数组
     * */
    makeControl:function makeControl(config,row)
    {
        if(Rsd.isEmpty(row))
        {
            return[];
        }
    
        var _config = config ||{};
        var _editable = _config.editable;
        var _value = row[_config.dataIndex|| _config.dataindex || _config.name];
        if(_value==undefined)
        {
            return document.createTextNode(_config.emptyText ||'-');
        }
 
           
        //debugger;
        var _ctrl = null;
        if(_editable)
        {
             _ctrl = document.createElement('a');
             _ctrl.onclick = function()
             {
                 alert("Error:Rsd.form.TextFK列编辑模式未实现");
             } 
            
        }
        else
        {
             _ctrl = document.createElement('span'); 
        }
        
        if(Rsd.app.indexedDb)
        {
            Rsd.app.indexedDb.getObjectByKey(_config.selector.modelType,_value,function(obj){
                if(obj)
                {
                    var _txt = document.createTextNode(obj[config.selector.textMember]);
                    _ctrl.appendChild(_txt);
                }
                else
                {
                    var _txt = document.createTextNode((_value == null || _value == undefined || _value == '') ? _config.emptyText ||'': _value);
                    _ctrl.appendChild(_txt);
                }    
            });
             
             
        }else
        {
           console.error("启动时 Rsd.app.indexedDb 未初始化");
        }    
        
        
        return [_ctrl];
    }
  
},function(type){

    
    var _selectorGetter = function () {

        return this.___selector;
    };

    var _selectorSetter = function (value) {
        
        if(Rsd.isEmpty(value))
        {
            this.___selector = null;
            return;
        }
        this.___selector = Rsd.apply({
            //className 如: 'Rsd.zen.dialog.BizListDialog'
            viewerType:null,
            //外键对象类型
            modelType:null,
            where:null,
            sort:null, 
            style:null,
            text:'[选 择]',
            /**
             * 选择器窗体标题
             */
            title:'',
            keyMember:'Id',
            textMember:'',
            multiple:false,
            handler:'btn_show_selector'

        },value); 
    }

    this.defineProperty(type,"selector", _selectorGetter, _selectorSetter,false);
});