# Control

控制器

Defined in: `src/control.js:6`
Module: gfs-react-mvc

## 方法

### Control

`Control
(

- modelName
- loadingbar
- mock

)
`

Defined in `src/control.js:324`

此方法是一个装饰器，只能用于类，被装饰后的类会变成对象列表（JSON）格式，主要目的是传递给组件使用，通过redux connect连接。 被装饰的类将成为一个控制器，处理异步数据逻辑或业务逻辑，将数据传递给视图或服务器

#### 参数:

`modelName` Object

实体类对象

`loadingbar` Loadingbar

废弃

`mock` Mock

废弃

参数名 | 类型 | 标识 | 描述
--- | --- | --- | ---
`modelName` | Object |  | 实体类对象
`loadingbar` | Loadingbar |  | 废弃
`mock` | Mock |  | 废弃

#### Returns:

object

#### Example:

     import {Sync,Control} from 'gfs-react-mvc'
     import TestModel from '../model/TestModel'
     //这里由于@为文档关键符号，所以下面将以$代替
     //@Control(TestModel)
     class TestControl{
         constructor(){}
         $action
         changeAge(){

             fetch('/test.json'[,params]).then((data)=>{
                 //control中默认提供update、del、insert、save四种操作数据方法，会根据不同的control名生成，如下根据testControl生成的方法testControlUpdate

                 dispatch(this.testControlUpdate('age','ajax改变的age：'+data.age) )
             })

          }
         //不建议使用下列方式
         //这里由于@为文档关键符号，所以下面将以$代替
         $Sync('/test',{
             method:'get'
         })
         $action
         save(data){
             //此处data是异步请求后服务器返回的结果
             if(data){
                 //返回数据更新页面节点信息
                 return data
             }
             //不做任何改变
             return false
         }
     }

### del

`del
(

- path
- modelName

)
`

Defined in `src/control.js:16`

删除store中某条数据

#### 参数:

`path` String

需要被删除的属性地址，根据具体的对象结构，例如一个结构为：var data={name:'test',other:{age:18}}的对象，如果想删除age的值应该是这样:this.del('data.other.age')

`modelName` String

model名字，默认是绑定model之后的modelname

参数名 | 类型 | 标识 | 描述
--- | --- | --- | ---
`path` | String |  | 需要被删除的属性地址，根据具体的对象结构，例如一个结构为：var data={name:'test',other:{age:18}}的对象，如果想删除age的值应该是这样:this.del('data.other.age')
`modelName` | String |  | model名字，默认是绑定model之后的modelname

#### Returns:

Function

#### Example:

       $Control(TestModel)
       class TestControl {
           delTest(data,dispatch,modelJson,model){
               this.del('age')
           }
       }

### getModelName

`getModelName
(

- actionName
- isDefault
- modelName

)
`

Defined in `src/control.js:406`

获取model方法名全名，在未传任何值时返回方法前缀

#### 参数:

`actionName` String

default='',方法名，可选

`isDefault` Boolean

是否获取系统中提供的方法名,默认false，可选

`modelName` String

model名字，可选

参数名 | 类型 | 标识 | 描述
--- | --- | --- | ---
`actionName` | String |  | default='',方法名，可选
`isDefault` | Boolean |  | 是否获取系统中提供的方法名,默认false，可选
`modelName` | String |  | model名字，可选

#### Returns:

string

### insert

`insert
(

- path
- data
- isImmutable
- modelName

)
`

Defined in `src/control.js:113`

插入store中某条数据

#### 参数:

`path` String

需要被删除的属性地址，根据具体的对象结构，例如一个结构为：var data={name:'test',other:{age:18}}的对象，如果想要在data中新增一些字段应该这样:this.insert({sex:'男'})

`data` String | object

需要保存的值，新的值会覆盖之前的值

`isImmutable` Boolean

是否将值转换为Immutable类型，默认为false，如果更新的值为object类型建议设置为true

`modelName` String

model名字，默认是绑定model之后的modelname

参数名 | 类型 | 标识 | 描述
--- | --- | --- | ---
`path` | String |  | 需要被删除的属性地址，根据具体的对象结构，例如一个结构为：var data={name:'test',other:{age:18}}的对象，如果想要在data中新增一些字段应该这样:this.insert({sex:'男'})
`data` | String | object |  | 需要保存的值，新的值会覆盖之前的值
`isImmutable` | Boolean |  | 是否将值转换为Immutable类型，默认为false，如果更新的值为object类型建议设置为true
`modelName` | String |  | model名字，默认是绑定model之后的modelname

#### Returns:

Function

#### Example:

       $Control(TestModel)
       class TestControl {
           insertTest(data,dispatch,modelJson,model){

               fetch('/test').then((data)=>{
                   this.insert({
                       sex:'男'
                   })
               })

           }
       }

### save

`save
(

- path
- data
- isImmutable
- modelName

)
`

Defined in `src/control.js:151`

保存store中某条数据

#### 参数:

`path` String

跟update一样

`data` String | object

需要保存的值，新的值会覆盖之前的值

`isImmutable` Boolean

是否将值转换为Immutable类型，默认为false，如果更新的值为object类型建议设置为true

`modelName` String

model名字，默认是绑定model之后的modelname

参数名 | 类型 | 标识 | 描述
--- | --- | --- | ---
`path` | String |  | 跟update一样
`data` | String | object |  | 需要保存的值，新的值会覆盖之前的值
`isImmutable` | Boolean |  | 是否将值转换为Immutable类型，默认为false，如果更新的值为object类型建议设置为true
`modelName` | String |  | model名字，默认是绑定model之后的modelname

#### Returns:

Function

#### Example:

       $Control(TestModel)
       class TestControl {
           saveTest(data,dispatch,modelJson,model){

               fetch('/test').then((data)=>{
                   this.save('age',data.age)
               })

           }
       }

### Sync

`Sync
(

- anywhere

)
`

Defined in `src/control.js:184`

异步操作，IE9以下不建议使用，Sync是一个装饰器（Decorator），用于装饰Control类中的方法，将原有的方法变成一个异步成功调用后执行结果方法，被装饰的方法需要返回数据或false，决定是否更新store刷新节点。

- 由Sync装饰后的方法，其作用域为Control，依然可以调用类中其他方法
- Sync参数error可以为Control中xxxError命名的方法替代，“xxx”命名规则必须与Sync装饰的方法名一致
- 被装饰后的方法在View中调用时传入的参数将已第二个为准，第一个参数将永远是异步执行后的结果
- 被装饰的方法名要和Model类中方法名对应

#### 参数:

`anywhere` Object | String

参数为一个字符串时，anywhere为url，当方法拥有2个参数，第一个参数作为url，第二个参数为object类型

`anywhere.dataType` String

数据返回类型 默认为json

`anywhere.asyn` Boolean

是否为异步请求，默认为true

`anywhere.method` String

数据请求方式，默认为GET，可选值有：POST、GET、OPTION、DEL、PUT

`anywhere.timeout` Number

请求超时时间，可选填

`anywhere.credentials` Object

跨域是是否要包含cookie值，可选值：include

`anywhere.error` Function

请求失败回调，可选

`anywhere.header` Object

包含的请求头，可选

`anywhere.body` Object

需要传递给服务端的属性字段值，可选

`anywhere.cache` Boolean

请求数据是否缓存

参数名 | 类型 | 标识 | 描述
--- | --- | --- | ---

`anywhere`

Object | String

参数为一个字符串时，anywhere为url，当方法拥有2个参数，第一个参数作为url，第二个参数为object类型

参数名 | 类型 | 标识 | 描述
--- | --- | --- | ---
`dataType` | String |  | 数据返回类型 默认为json
`asyn` | Boolean |  | 是否为异步请求，默认为true
`method` | String |  | 数据请求方式，默认为GET，可选值有：POST、GET、OPTION、DEL、PUT
`timeout` | Number |  | 请求超时时间，可选填
`credentials` | Object |  | 跨域是是否要包含cookie值，可选值：include
`error` | Function |  | 请求失败回调，可选
`header` | Object |  | 包含的请求头，可选
`body` | Object |  | 需要传递给服务端的属性字段值，可选
`cache` | Boolean |  | 请求数据是否缓存

#### Returns:

function

#### Example:

     import {Sync,Control} from 'gfs-react-mvc'

     class TestControl{
         constructor(){}
         //这里由于@为文档关键符号，所以下面将以$代替
         $Sync('/test',{
             method:'get'
         })
         save(data){
             //此处data是异步请求后服务器返回的结果
             if(data){
                 //返回数据更新页面节点信息
                 return data
             }
             //不做任何改变
             return false
         }
         $Sync('/del',{
             method:'get'
         })
         del(data){
             //此处data是异步请求后服务器返回的结果
             if(data){
                 //返回数据更新页面节点信息
                 return {
                     //手动指定model对应方法
                     type:this.getModelName('del'),
                     data:data
                 }
             }
             //不做任何改变
             return false
         }
         //也可直接使用
         $Sync()
         update(data){
             //此处data是异步请求后服务器返回的结果
             if(data){
                 //返回数据更新页面节点信息
                 return {
                     //手动指定model对应方法
                     type:this.getModelName('update'),
                     data:data
                 }
             }
             //不做任何改变
             return false
         }
     }

### update

`update
(

- path
- data
- modelName

)
`

Defined in `src/control.js:41`

更新store中某条数据,主要已合并为主，如果是想将新值覆盖旧值，请使用save方法

#### 参数:

`path` String

需要被删除的属性地址，根据具体的对象结构，例如一个结构为：var data={name:'test',other:{age:18}}的对象，如果想修改age的值应该是这样:this.update('data.other.age',20)

`data` String | objaect

需要合并的值

`modelName` String

model名字，默认是绑定model之后的modelname

参数名 | 类型 | 标识 | 描述
--- | --- | --- | ---
`path` | String |  | 需要被删除的属性地址，根据具体的对象结构，例如一个结构为：var data={name:'test',other:{age:18}}的对象，如果想修改age的值应该是这样:this.update('data.other.age',20)
`data` | String | objaect |  | 需要合并的值
`modelName` | String |  | model名字，默认是绑定model之后的modelname

#### Returns:

Function

#### Example:

       $Control(TestModel)
       class TestControl {
           updateTest(data,dispatch,modelJson,model){
               fetch('/test').then((data)=>{
                   this.update('age',data.age)
               })
           }
       }

### updateWith

`updateWith
(

- data
- merge
- modelName

)
`

Defined in `src/control.js:74`

更新store中某条数据，可自定义合并规则

#### 参数:

`data` Object

需要合并的值

`merge` Function

自定义合并规则方法

`modelName` String

model名字，默认是绑定model之后的modelname

参数名 | 类型 | 标识 | 描述
--- | --- | --- | ---
`data` | Object |  | 需要合并的值
`merge` | Function |  | 自定义合并规则方法
`modelName` | String |  | model名字，默认是绑定model之后的modelname

#### Returns:

Function

#### Example:

       $Control(TestModel)
       class TestControl {
           updateTest(data,dispatch,modelJson,model){
               return
                   fetch('/test').then((data)=>{
                       this.updateWith({
                           names:['test','test1','test2']
                       },function merger(prev,next){
                           if( Immutable.List.isList(prev) &&  Immutable.List.isList(next)){
                               return next
                           }
                           if(prev && prev.mergeWith){
                               return prev.mergeWith(merger,next)
                           }
                           return next
                       })
                   })

           }
       }