# src/view.js File

    //import {bindingMixin} from 'gfs-react-redux-twoway-binding'
    import { connect } from 'react-redux'
    import extend from 'extend'
    /**
     * 视图
     * @class View
     * */
    /**
     * 一个装饰器方法，用于装饰类，被装饰的类为页面视图，或者说是react的component，并不是每一个component都需要被装饰
     * @method View
     * @param action {object} control对象，可以是一个数组，比如：View([TestControl,Test2Control] )
     * @return class
     * @example
     *
     *       import {View} from 'gfs-react-mvc'
     *       import TestControl from './TestControl'
     *       //这里由于@为文档关键符号，所以下面将以$代替
     *       //@View(TestControl)
     *       $View(TestControl)
             class TestComponent extends Component {
                constructor(props) {
                    super(props)
                }

                componentDidMount(){
                    setTimeout(()=>{
                        //调用control中的action
                        this.props.save(this)
                    },1000)
                }

                static defaultProps={}

                render() {
                    console.log('age:',this.props.testmodel.get('age') )
                    return (
                        <div>
                            {this.props.testmodel.get('age')}
                        </div>
                    )
                }
            }
     * */
    export  function View(actions){

        return function(target){

            if(actions){

                actions =Array.prototype.concat.call([],actions)
                let controls = {}
                for(let i=0,len=actions.length;i<len;i++){
                    controls = extend(controls,actions[i].controls)
                }
                return connect(function(state){
                    let stories = {}
                    for(let i=0,len=actions.length;i<len;i++){
                        stories[actions[i].modelName ] =  state[actions[i].modelName ]
                    }
                    return stories
                },controls ||{})(target)
            }

            return target
        }
    }