My favorites | Sign in
Project Home Downloads Wiki Issues Source
READ-ONLY: This project has been archived. For more information see this post.
Search
for
DataService  
Updated Nov 3, 2011 by jiangjia...@gmail.com

模式

原型版本的dataservice使用的是transaction script模式,对于rest api,其实存在两种模式

一种如 /user/1/add_to_roles, /user/1/remove_from_roles

通常就是类似如下

user=User.findById(1);
user.add_to_roles(params);

类似于 /users , 则被映射到User的静态方法,如User.find(params)

对于transaction script 则是

/user/add_to_roles

userService.add_to_roles(params); //params.user_id 在其中

在c3版本 中,使用的是第二种模式,但未来 可能 会切换 到第一种,第二种简单,有性能 ,但不够oo,类似java中通常的模式,只是没有dao

查询表达式

为了便于extjs 前端的store.load方法调用,允许使用contains,startswith等参数后缀进行查询,目前支持的有

__contains like %?%
__startswith like ?%
__endswith like %?
__gt  >

__lt <
__gte >=

__lte <=

__is_null  is null

__is_not_null is not null

__in  in (x,x,x)
__not_in not in (x,x,x)
比方按部门过滤员工并且按名称包含搜索就是

employees.load({params:{department_id:xxx,name__contains:xxx}});

以下仅仅(select/group/order/joins)为了快速创建原型程序 ,正式版本 在settings.js关闭这些功能

select 参数支持

替换 select中的字段列表

group

生成group by

order

extjs是sort/dir ,仅仅单一排序

生成order by 子句,不考虑 extjs

joins 参数支持

注意,仅仅用于不注意安全的场合,例子根据产品类别 ,名称 过滤,产品类别是多级的

    Ext.getCmp('tree').on('click',function(node){
    	
    	var params={'name__contains':Ext.getCmp('search_key').getValue()};
        if (node!=tree.root && node.attributes.code){
        	
        	params.joins=" left outer join product_types on products.product_type_id=product_types.id"
        	
        	params['product_types.lcode__startswith']=node.attributes.code;
        }
    	products.loadFix({params:params});
    	
    });

规范

1. 所有服务类均存放在services 子目录 ,系统在启动时自动导入

//load data services;

require('fs').readdir('./services', function(err, files) {
	files.forEach(function(js) {
		require('./services/' + js);
	});
});

2. 文件命令复数,小写,如deparmtents.js/roles.js/currencies.js

3. 例子

var client=require('../settings.js').client;
var register_data_service=require('../ds.js').register_data_service;
var DataService=require('../ds.js').DataService;

function DepartmentDataService() {
	DataService.call(this, "departments");
}

require('util').inherits(DepartmentDataService, DataService);
register_data_service('deparmtents', DepartmentDataService);


DepartmentDataService.prototype.tree=function(params,callback){
	
	
}

注意require 相对位置

Powered by Google Project Hosting