customData 如何与 JavaScript 绑定
How can customData can be binded with JavaScript
在受影响的应用程序中有一个响应式 table,其 ColumnListItems 是通过 JavaScript 代码添加的。现在,线条应该根据其状态由突出显示机制突出显示。第一个想法是通过一个普通的控制器功能来控制整个事情。我很快放弃了这个想法,因为格式化程序就是为这种情况而设计的。所以我创建了适当的 Formatter 函数并在 JavaScript 代码中引用了它。该调用似乎没有错误,因为在每种情况下都会触发 "console.log" 。也可以毫无问题地传输固定值。但是,我必须传输的值位于每行的 customData 中......
无论我如何尝试形成路径,我都会得到 "undefined" 或 "null" 输出。
我已经尝试过以下路径:
- "/已编辑"
- "/customData/edited"
- "mAggregations/customData/0/mProperties/value"
- "/mAggregations/items/0/mAggregations/customData/0/mProperties/value"
来自 Controller.js 的代码(有意识地指示不同的路径):
var colListItem = new sap.m.ColumnListItem({
highlight: {
parts: [{
path: "/mAggregations/items/0/mAggregations/customData/0/mProperties/value"
}, {
path: "/edited"
}],
formatter: Formatter.setIndication
},
cells: [oItems]
});
// first parameter to pass while runtime to the formatter
colListItem.data("editable", false);
// second paramter for the formatter function
colListItem.data("edited", false);
oTable.addItem(colListItem);
来自 Formatter.js 的代码:
setIndication: function (bEditable, bEdited) {
var sReturn;
if (bEditable && bEdited) {
// list item is in edit mode and edited
sReturn = "Error";
} else if (bEditable || bEdited) {
// list item is in edit mode or edited
sReturn = "Success";
} else {
sReturn = "None";
}
return sReturn;
}
格式化程序的目标也是自动使用模型的值,以避免自己实现监听器等。
我希望你们中的一个人有一个 good/new 的想法可以给我带来解决方案 :)
非常感谢!
您不能绑定自定义数据。因为 customData 位于元素中,所以它就像一个 属性.
这就是您在 colListItem 上定义它的原因:colListItem.data("key", value)
您只能绑定一个模型。
所以我看到三个解决方案
- 将信息存储在单独的本地 JSON 模型中,您可以在其中指定绑定路径以将值提供给格式化程序
- 不要通过绑定路径向格式化程序提供信息,而是通过格式化程序函数中的
this
(=控制器)从控制器中保存信息的全局变量读取 model/object/array
- 将信息存储在每个元素的 customData 中,并通过
this
(=ColumnListItem).data()
在格式化程序函数中访问元素引用。
将上下文传递给类似于此 formatter: [Formatter.setIndication, colListItem]
的格式化程序
1. 和 2 的缺点:您需要一个键才能在其他模型或对象中进行相应的查找。
据我所知,我会用解决方案 3 来解决它。
在受影响的应用程序中有一个响应式 table,其 ColumnListItems 是通过 JavaScript 代码添加的。现在,线条应该根据其状态由突出显示机制突出显示。第一个想法是通过一个普通的控制器功能来控制整个事情。我很快放弃了这个想法,因为格式化程序就是为这种情况而设计的。所以我创建了适当的 Formatter 函数并在 JavaScript 代码中引用了它。该调用似乎没有错误,因为在每种情况下都会触发 "console.log" 。也可以毫无问题地传输固定值。但是,我必须传输的值位于每行的 customData 中...... 无论我如何尝试形成路径,我都会得到 "undefined" 或 "null" 输出。
我已经尝试过以下路径:
- "/已编辑"
- "/customData/edited"
- "mAggregations/customData/0/mProperties/value"
- "/mAggregations/items/0/mAggregations/customData/0/mProperties/value"
来自 Controller.js 的代码(有意识地指示不同的路径):
var colListItem = new sap.m.ColumnListItem({
highlight: {
parts: [{
path: "/mAggregations/items/0/mAggregations/customData/0/mProperties/value"
}, {
path: "/edited"
}],
formatter: Formatter.setIndication
},
cells: [oItems]
});
// first parameter to pass while runtime to the formatter
colListItem.data("editable", false);
// second paramter for the formatter function
colListItem.data("edited", false);
oTable.addItem(colListItem);
来自 Formatter.js 的代码:
setIndication: function (bEditable, bEdited) {
var sReturn;
if (bEditable && bEdited) {
// list item is in edit mode and edited
sReturn = "Error";
} else if (bEditable || bEdited) {
// list item is in edit mode or edited
sReturn = "Success";
} else {
sReturn = "None";
}
return sReturn;
}
格式化程序的目标也是自动使用模型的值,以避免自己实现监听器等。 我希望你们中的一个人有一个 good/new 的想法可以给我带来解决方案 :) 非常感谢!
您不能绑定自定义数据。因为 customData 位于元素中,所以它就像一个 属性.
这就是您在 colListItem 上定义它的原因:colListItem.data("key", value)
您只能绑定一个模型。
所以我看到三个解决方案
- 将信息存储在单独的本地 JSON 模型中,您可以在其中指定绑定路径以将值提供给格式化程序
- 不要通过绑定路径向格式化程序提供信息,而是通过格式化程序函数中的
this
(=控制器)从控制器中保存信息的全局变量读取 model/object/array - 将信息存储在每个元素的 customData 中,并通过
this
(=ColumnListItem).data()
在格式化程序函数中访问元素引用。 将上下文传递给类似于此formatter: [Formatter.setIndication, colListItem]
的格式化程序
1. 和 2 的缺点:您需要一个键才能在其他模型或对象中进行相应的查找。
据我所知,我会用解决方案 3 来解决它。