open
- open(options, callback, async)
使用范围: client
编程语言: javascript
父类: Item 类
描述说明
调用 open 向服务端发送请求以获取实体项的数据集。
open 方法可以有以下参数:
options- 一个对象,指定发送到服务端的请求参数callback:如果参数不存在,则同步向服务端发送请求, 否则,异步执行请求,并在收到数据集后执行回调async:如果其值为 true,且缺少 callback 参数,则异步执行请求
参数的顺序无关紧要。
该方法根据 options 初始化实体项的 fields 并制定请求参数,
如果为实体项定义了 on_before_open 事件处理程序,则触发 。
之后,它向服务端发送请求。如果指定了 callback 参数对应的函数,
则异步执行请求,否则同步执行。
服务端在收到请求后,检查服务端上相应的实体项(具有相同 ID 属性的 task 树 中的实体项)是否具有 on_open 事件处理程序。如果有,它执行此事件处理程序并将执行结果返回给客户端;否则,根据请求参数生成 SELECT SQL 查询语句,执行此查询并将结果返回给客户端。
客户端在收到请求结果后,更改其数据集,将 active 设置为 true, 将 item_state 设置为 “浏览” 模式,转到数据集的第一条记录, 触发 on_after_open 和 on_filters_applied 事件处理程序(如果为实体项定义了),并更新控件。
然后,如果指定了 callback 参数,则调用对应的函数。
Options
options 对象参数可以具有以下属性:
expanded- 如果此属性的值为 true,则在服务端生成的 SELECT 查询语句将具有 JOIN 子句以获取 查找字段 的查找值, 否则不会返回查找值。默认值为true。fields- 使用此参数指定 SELECT 查询的 WHERE 子句。此参数是字段名称列表。 如果省略,则使用 set_fields 方法定义的字段。 如果在open方法执行之前未调用 set_fields 方法, 则使用开发者创建的所有字段。where- 使用此参数指定如何在 SQL 查询中过滤记录。此参数是 “键值对” 对象, 其中键是字段名称,后跟双下划线,然后是过滤符号 (请参阅 过滤记录 )。 如果省略,则使用 set_where 方法定义的值。 如果在open方法执行之前未调用 set_where 方法, 且省略了where参数,则使用为项目定义的 过滤器 的值来过滤记录。order_by- 使用order_by指定记录的排序顺序。此参数是字段名称列表。 如果字段名称前有 '-' 符号,则在此字段上按降序排序记录。 如果省略,则使用 set_order_by 方法定义的列表。offset- 使用offset指定要返回的第一行记录的偏移量。limit- 使用limit限制 SQL 查询语句的输出 “前几行” 。funcs- 此参数可以是 “键值对” 对象,其中键是字段名称,值是将在 SELECT 查询中应用于字段的函数名称。group_by- 使用group_by指定用于对查询结果进行分组的字段。此参数必须是字段名称列表。open_empty- 如果此参数设置为true,应用程序不会向服务端发送请求,而是仅仅初始化一个空的数据集。默认值为false。params- 使用此参数传递一些用户定义的选项,以在服务端的 on_open 事件处理程序中使用。 此参数必须是 “键值对” 对象。
备注
当实体项的 paginate 属性设置为 true
且通过 create_table 方法创建表时,
limit 和 offset 参数由表根据其行数和当前页面在内部设置。
Examples
function get_customer_sales(task, customer_id) {
var date1 = new Date(new Date().setYear(new Date().getFullYear() - 5)),
date2 = new Date(),
invoices = task.invoices.copy();
invoices.open({
fields: ['customer', 'invoicedate', 'total'],
where: {customer: customer_id, invoicedate__ge: date1, invoicedate__le: date2},
order_by: ['invoicedate']
});
}
function get_customer_sales(task, customer_id) {
var date1 = new Date(new Date().setYear(new Date().getFullYear() - 5)),
date2 = new Date(),
invoices = task.invoices.copy();
invoices.set_fields(['customer', 'invoicedate', 'total']);
invoices.set_where({customer: customer_id, invoicedate__ge: date1, invoicedate__le: date2});
invoices.set_order_by(['invoicedate']);
invoices.open();
}
function get_sales(task) {
var sales = task.invoices.copy();
sales.open({
fields: ['customer', 'id', 'total'],
funcs: {'id': 'count', 'total': 'sum'},
group_by: ['customer'],
order_by: ['customer']
});
}