UNPKG

4.24 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 */
14var refSelectedRows = function refSelectedRows() {
15 return ko.pureComputed({
16 read: function read() {
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 * @memberof DataTable
32 * @param {string} fieldName 绑定的字段名
33 * @example
34 * datatable.ref('field1').subscribe(function(){})
35 */
36var ref = function ref(fieldName) {
37 this.createField(fieldName);
38 if (!this.valueChange[fieldName]) this.valueChange[fieldName] = ko.observable(1);
39 return ko.pureComputed({
40 read: function read() {
41 this.valueChange[fieldName]();
42 this.currentRowChange();
43 var row = this.getCurrentRow();
44 if (row) {
45 return row.getChildValue(fieldName);
46 } else return '';
47 },
48 write: function write(value) {
49 var row = this.getCurrentRow();
50 if (row) row.setChildValue(fieldName, value);
51 },
52 owner: this
53 });
54};
55
56/**
57 * 绑定字段属性,当字段属性发生改变时触发对应方法
58 * @memberof DataTable
59 * @param {string} fieldName 绑定的字段名
60 * @param {string} key 绑定的属性key
61 * @example
62 * datatable.refMeta('field1','type').subscribe(function(){})
63 */
64var refMeta = function refMeta(fieldName, key) {
65 if (!this.metaChange[fieldName + '.' + key]) this.metaChange[fieldName + '.' + key] = ko.observable(1);
66 return ko.pureComputed({
67 read: function read() {
68 this.metaChange[fieldName + '.' + key]();
69 this.currentRowChange();
70 return this.getMeta(fieldName, key);
71 },
72 write: function write(value) {
73 this.setMeta(fieldName, key, value);
74 },
75 owner: this
76 });
77};
78
79/**
80 * 绑定当前行的字段属性,当字段属性发生改变时触发对应方法
81 * @memberof DataTable
82 * @param {string} fieldName 绑定的字段名
83 * @param {string} key 绑定的属性key
84 * @example
85 * datatable.refRowMeta('field1','type').subscribe(function(){})
86 */
87var refRowMeta = function refRowMeta(fieldName, key) {
88 if (!this.metaChange[fieldName + '.' + key]) this.metaChange[fieldName + '.' + key] = ko.observable(1);
89 return ko.pureComputed({
90 read: function read() {
91 this.metaChange[fieldName + '.' + key]();
92 this.currentRowChange();
93 var row = this.getCurrentRow();
94 if (row) return row.getMeta(fieldName, key);else return this.getMeta(fieldName, key);
95 },
96 write: function write(value) {
97 var row = this.getCurrentRow();
98 if (row) row.setMeta(fieldName, value);
99 },
100 owner: this
101 });
102};
103
104/**
105 * 绑定字段是否可修改属性,当字段可修改属性发生改变时触发对应方法
106 * @memberof DataTable
107 * @param {string} fieldName 绑定的字段名
108 * @example
109 * datatable.refEnable('field1').subscribe(function(){})
110 */
111var refEnable = function refEnable(fieldName) {
112 return ko.pureComputed({
113 //enable优先级: dataTable.enable > row上的enable > field中的enable定义
114 read: function read() {
115 this.enableChange();
116 if (!fieldName) return this.enable;
117 var fieldEnable = this.getRowMeta(fieldName, 'enable');
118 if (typeof fieldEnable == 'undefined' || fieldEnable == null) fieldEnable = true;
119 return fieldEnable && this.enable;
120 },
121 owner: this
122 });
123};
124
125export var refFunObj = {
126 refSelectedRows: refSelectedRows,
127 ref: ref,
128 refMeta: refMeta,
129 refRowMeta: refRowMeta,
130 refEnable: refEnable
131};
\No newline at end of file