sapui5 - customData如何与JavaScript绑定
问题描述
受影响的应用程序中有一个响应式表,其 ColumnListItems 是通过 JavaScript 代码添加的。现在线条应该根据它们的状态通过突出显示机制突出显示。第一个想法是通过正常的控制器功能来控制整个事情。我很快放弃了这个想法,因为格式化程序是为这种情况设计的。所以我创建了适当的 Formatter 函数并在 JavaScript 代码中引用它。该调用似乎没有错误,因为在每种情况下都会触发“console.log”。也可以毫无问题地传递固定值。但是,我必须传输的值位于每行的 customData 中......无论我如何尝试形成路径,我都会得到“未定义”或“空”输出。
我已经尝试过以下路径:
- “/已编辑”
- “/customData/已编辑”
- “mAggregations/customData/0/mProperties/值”
- “/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;
}
目标也是格式化程序自动使用模型的值,以避免它自己实现侦听器等。我希望你们中的一个人有一个好的/新的想法,可能会给我带来一个解决方案:) 非常感谢提前!
解决方案
您不能绑定 customData。因为 customData 位于元素中,所以它就像一个属性。
这就是你在 colListItem 上定义它的原因:colListItem.data("key", value)
您只能绑定模型。
所以我看到了三个解决方案
- 将信息存储在单独的本地 JSON 模型中,您可以在其中指定绑定路径以将值提供给格式化程序
- 不要通过绑定路径向格式化程序提供信息,而是从控制器中的全局变量中读取模型/对象/数组,通过
this
格式化程序函数中的 (=controller)保存信息 - 将信息存储在每个元素的 customData 中,并通过
this
(=ColumnListItem)访问格式化程序函数中的元素引用.data()
。将上下文传递给与此类似的格式化程序formatter: [Formatter.setIndication, colListItem]
1. 和 2 的缺点:您需要一个用于在其他模型或对象中进行相应查找的键。
据我了解,我会用解决方案 3 解决它。
推荐阅读
- ios - Flutter:尝试将 Flutter 应用程序安装到真实 iOS 设备时出现无法安装“Runner”错误
- windows - gcc 找到但未在 Windows git bash 上执行
- php - 如何将数组中的对象值放入字符串
- javascript - React 延迟加载 - 何时使用
- c# - 如何知道键盘上的某个按钮被按住(例如 Shift)?
- python - 是否有 numpy/scipy 函数来计算出站罚款?
- blazor - 在 .Net Blazor Server 项目中检测移动用户
- rest - JDK 1.8、JAX-RS 2.1、CXF 和 Websphere 8.5.5.10
- vue.js - Vue bootstrap-vue 手风琴打不开
- java - Cucumber 和 Jenkins:错误的“重复步骤定义”