在受影响的应用程序中是一个响应表,其响应表ColumnListItems通过JavaScript代码添加。现在,应根据状态使用突出显示机制突出显示行。第一个想法是通过常规的控制器功能来控制整个事情。我很快就放弃了这个想法,因为格式化程序是针对此类情况的。因此,我创建了适当的Formatter函数,并在JavaScript代码中对其进行了引用。调用似乎没有错误,因为在每种情况下都会触发“ console.log”。固定值的传输也可能没有问题。但是,我必须传输的值位于每行的customData中... 无论我如何尝试形成路径,都会得到“未定义”或“空”输出。
我已经尝试了以下路径:
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;
}
目标也是格式化程序自动使用模型的值,以避免其自己实现侦听器等。 我希望你们中的一个有一个好主意,可能会给我带来一个解决方案:) 提前非常感谢!
答案 0 :(得分:1)
您无法绑定到customData。因为customData位于元素中,所以它就像一个属性。
这就是为什么您在colListItem上定义它的原因:colListItem.data("key", value)
您只能绑定模型。
所以我看到了三种解决方案
this
(= controller)从保存信息的控制器中的全局变量读取模型/对象/数组this
(= ColumnListItem).data()
访问格式化程序函数中的元素引用。
将上下文传递给与此formatter: [Formatter.setIndication, colListItem]
1和2的缺点:在其他模型或对象中,您需要分别进行查找的键。
据我了解,我可以使用解决方案3来解决。