UNPKG

4.28 kBJavaScriptView Raw
1/**
2 * Module : kero dataTable ref
3 * Author : liuyk(liuyk@yonyou.com)
4 * Date : 2016-08-01 14:34:01
5 */
6
7/**
8 * 为选中行绑定监听,当选中行发生改变时触发对应方法
9 * @memberof DataTable
10 * @param {string} fieldName 绑定的字段名
11 * @example
12 * datatable.refSelectedRows().subscribe(function(){})
13 */
14const refSelectedRows = function() {
15 return ko.pureComputed({
16 read: function() {
17 var ins = this.selectedIndices() || []
18 var rs = this.rows()
19 var selectedRows = []
20 for (var i = 0; i < ins.length; i++) {
21 selectedRows.push(rs[i])
22 }
23 return selectedRows
24 },
25 owner: this
26 })
27}
28
29
30/**
31 * 为某个字段绑定监听,当字段发生改变时触发对应方法
32 * @memberof DataTable
33 * @param {string} fieldName 绑定的字段名
34 * @example
35 * datatable.ref('field1').subscribe(function(){})
36 */
37const ref = function(fieldName) {
38 this.createField(fieldName);
39 if (!this.valueChange[fieldName])
40 this.valueChange[fieldName] = ko.observable(1);
41 return ko.pureComputed({
42 read: function() {
43 this.valueChange[fieldName]();
44 this.currentRowChange();
45 var row = this.getCurrentRow()
46 if (row) {
47 return row.getChildValue(fieldName)
48 } else
49 return ''
50 },
51 write: function(value) {
52 var row = this.getCurrentRow()
53 if (row)
54 row.setChildValue(fieldName, value);
55 },
56 owner: this
57 })
58}
59
60/**
61 * 绑定字段属性,当字段属性发生改变时触发对应方法
62 * @memberof DataTable
63 * @param {string} fieldName 绑定的字段名
64 * @param {string} key 绑定的属性key
65 * @example
66 * datatable.refMeta('field1','type').subscribe(function(){})
67 */
68const refMeta = function(fieldName, key) {
69 if (!this.metaChange[fieldName + '.' + key])
70 this.metaChange[fieldName + '.' + key] = ko.observable(1);
71 return ko.pureComputed({
72 read: function() {
73 this.metaChange[fieldName + '.' + key]();
74 this.currentRowChange();
75 return this.getMeta(fieldName, key)
76 },
77 write: function(value) {
78 this.setMeta(fieldName, key, value)
79 },
80 owner: this
81 })
82}
83
84/**
85 * 绑定当前行的字段属性,当字段属性发生改变时触发对应方法
86 * @memberof DataTable
87 * @param {string} fieldName 绑定的字段名
88 * @param {string} key 绑定的属性key
89 * @example
90 * datatable.refRowMeta('field1','type').subscribe(function(){})
91 */
92const refRowMeta = function(fieldName, key) {
93 if (!this.metaChange[fieldName + '.' + key])
94 this.metaChange[fieldName + '.' + key] = ko.observable(1);
95 return ko.pureComputed({
96 read: function() {
97 this.metaChange[fieldName + '.' + key]();
98 this.currentRowChange();
99 var row = this.getCurrentRow()
100 if (row)
101 return row.getMeta(fieldName, key)
102 else
103 return this.getMeta(fieldName, key)
104 },
105 write: function(value) {
106 var row = this.getCurrentRow()
107 if (row)
108 row.setMeta(fieldName, value)
109 },
110 owner: this
111 })
112}
113
114/**
115 * 绑定字段是否可修改属性,当字段可修改属性发生改变时触发对应方法
116 * @memberof DataTable
117 * @param {string} fieldName 绑定的字段名
118 * @example
119 * datatable.refEnable('field1').subscribe(function(){})
120 */
121const refEnable = function(fieldName) {
122 return ko.pureComputed({
123 //enable优先级: dataTable.enable > row上的enable > field中的enable定义
124 read: function() {
125 this.enableChange();
126 if (!fieldName)
127 return this.enable;
128 var fieldEnable = this.getRowMeta(fieldName, 'enable')
129 if (typeof fieldEnable == 'undefined' || fieldEnable == null)
130 fieldEnable = true;
131 return fieldEnable && this.enable
132 },
133 owner: this
134 })
135}
136
137export const refFunObj = {
138 refSelectedRows: refSelectedRows,
139 ref: ref,
140 refMeta: refMeta,
141 refRowMeta: refRowMeta,
142 refEnable: refEnable
143}