customData 如何与 JavaScript 绑定

How can customData can be binded with JavaScript

在受影响的应用程序中有一个响应式 table,其 ColumnListItems 是通过 JavaScript 代码添加的。现在,线条应该根据其状态由突出显示机制突出显示。第一个想法是通过一个普通的控制器功能来控制整个事情。我很快放弃了这个想法,因为格式化程序就是为这种情况而设计的。所以我创建了适当的 Formatter 函数并在 JavaScript 代码中引用了它。该调用似乎没有错误,因为在每种情况下都会触发 "console.log" 。也可以毫无问题地传输固定值。但是,我必须传输的值位于每行的 customData 中...... 无论我如何尝试形成路径,我都会得到 "undefined" 或 "null" 输出。

我已经尝试过以下路径:

来自 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)

您只能绑定一个模型。

所以我看到三个解决方案

  1. 将信息存储在单独的本地 JSON 模型中,您可以在其中指定绑定路径以将值提供给格式化程序
  2. 不要通过绑定路径向格式化程序提供信息,而是通过格式化程序函数中的 this(=控制器)从控制器中保存信息的全局变量读取 model/object/array
  3. 将信息存储在每个元素的 customData 中,并通过 this(=ColumnListItem).data() 在格式化程序函数中访问元素引用。 将上下文传递给类似于此 formatter: [Formatter.setIndication, colListItem]
  4. 的格式化程序

1. 和 2 的缺点:您需要一个键才能在其他模型或对象中进行相应的查找。

据我所知,我会用解决方案 3 来解决它。