控制器

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
                   }) 
               })

       }
   }