Source: form/Images.js

/** 
 * @description 多个图片选择控件【从服务端选择图片】
 * */ 
Rsd.define('Rsd.form.Images', {
    extend: 'Rsd.control.ListView',
    requires:['Rsd.form.Image'],
    xtype: 'images',
    ctrlTagName: 'div',
    ctrlCls: 'x-control-images',
    dataIndex:'',
    clip:null,
   
    /**
    * @description 是否是只读模式
    * */
    readOnly:false,
    /**
     * @description image/jpeg, image/x-png, image/gif
     * */
    accept:'*/*',
    /**
     * 
     */
    border:true,
    /**
     * 控件的背景图片,false 或者 none 表示不设置背景图片
     */
    backgroundImage:false,
    /**
     * @description value 值格式化字符串
     * */
    formatString:null,
    /**
    * @description 允许看大图
    * */
    zoomView:true,
    /**
     * 图片最多数量
     */
    maxLength:4,
    /**
     * 自定义选择事件
     *  */ 
    onselect:null,
    /**
     * 自定义删除事件
     */
    ondelete:null,
    /**
     * 选择的文件发生改变
     */
    onchange:null,
   
    /*
     * */
    constructor: function Images(config) {

        this.apply(config||{});
    },
    /**
     * 
     */
    onAfterInit:function onAfterInit()
    {
        this.callParent();
        if(this.value)
        {
            this.setValue(this.value);
        }
       
    },
    /**
     * 
     * @param {Array} value 图片URL数组
     */
    setValue:function (value)
    {
        var me = this;
        var _value = value||this.value;
        var urls =[];
        var items = [];
        if(Rsd.isString(_value))
        {
            urls.push(_value);
        }
        if(Rsd.isArray(_value))
        {
            urls = _value;
        }
        for(var i in urls)
        {
            items.push(
                {
                    xtype:'image',
                    width:'100%',
                    height:'100%',
                    label:null,
                    src: Rsd.isObject(urls[i])?urls[i].src:urls[i],
                    readOnly:me.readOnly,
                    border:me.border,
                    parent:me,
                    onselect:'selectImagsFromAlbums',
                    onview:'viewAllImages'
                }
            );
        }
        if(!me.readOnly)
        {

            for(var i  =items.length;i< me.maxLength;i++) 
            {
                items.push(
                    {
                        xtype:'image',
                        width:'100%',
                        height:'100%',
                        label:null,
                        src: '#',
                        border:me.border,
                        readOnly:me.readOnly,
                        parent:me,
                        onselect:'selectImagsFromAlbums'
                    }
                );
            }
            
        } 

        this.loadData(items);

    },
     /***
      * 
      */
     selectImagsFromAlbums:function selectImagsFromAlbums()
    {
        var me = this;
        var _d = Rsd.create('Rsd.tool.ImageSelector', { 
            title:'图片选择', 
            mode:'dialog',
            closeBtn:true,
            draggable:true,
            readOnly: false,  
            parent: me,  
            services:me.selectorServices, 
            //选择图片后回调处理
            callback: function(item){
                me.setValue(item["Url"]);
        } });

        _d.showDialog().load();
    },
    /**
     * 
     */
    viewAllImages:function viewAllImages(sender,evt)
    {
        var _value = sender.parent.getValue();
        var urls =[]; 
        if(Rsd.isString(_value))
        {
            urls.push(_value);
        }
        if(Rsd.isArray(_value))
        {
            urls = _value;
        }
        var imgs = [];
        for(var i in urls)
        {
            imgs.push({src:urls[i],text: ""});
        }
        var _view = Rsd.create('Rsd.widget.ImageViewer',{title:''});

        _view.showDialog(this.parent).loadData(imgs);
    },
    /*
    * */
    getValue:function getValue() {
        return this.value;
    },
    
    /*
    *
    * */
    makeControl:function makeControl(config,row)
    {
        function formatTemplateString(str,row)
        {      //debugger;
            var html = "";
            var arr = str.split('#');

            var _c_str = null;
            var _n_str = null;
            for(var i=0 ;i< arr.length;i++)
            {
                _c_str = arr[i];
                if(_c_str == undefined)
                {
                    continue;
                }
                if( _c_str.startWith('=') && _c_str.endWith('='))
                {
                    if(row.hasOwnProperty(_c_str.replaceByRegExp("=","")))
                    {
                        html += row[_c_str.replaceByRegExp("=","")] ;
                    }
                    else
                    {
                        if(Rsd.app.hasOwnProperty(_c_str.replaceByRegExp("=","")))
                        {
                            html += Rsd.app[_c_str.replaceByRegExp("=","")] ;
                        }

                    }
                    continue;
                }

                html += _c_str;
                if(i < (arr.length -1) )
                {
                    _n_str =  arr[i+1];
                    if(_n_str == undefined || !( _n_str.startWith('=') && _n_str.endWith('=')))
                    {
                        html +='#';
                    }
                }
            }
            return html;
        }

        var me = this;

        me.timer = (me.timer||10) + 0;
        if(me.timer > 3000)
        {
            me.timer=10;
        }
        var _config = config ||{};
        //var _editable = _config.editable;
        var _value = row[_config.dataIndex||_config.name];
        var _h = _config.height || 50;
        var _w = _config.width || 50;
        var _ctrl = document.createElement('img');

        setTimeout(function () {
            var _src = '';
            if(_value &&_value.startWith('http://'))
            {
                _src = _value;
            }else
            {
                _src = formatTemplateString(_config.formatString,row);
            }

            var list = _src.split('http://');
            if(list.length > 2)
            {
                _ctrl.src = list[list.length -1];
            }else {
                _ctrl.src = _src;
            }

        },me.timer);
        if(_config.clip)
        {
            _ctrl.style.clip = _config.clip;
        }
        _ctrl.width =_w;
        _ctrl.height = _h;

        return _ctrl;
    }

});