将所选项绑定到对话框

时间:2018-01-17 21:53:28

标签: sapui5

我试图在对话框的控件中显示表项的数据。这是一个Plunker:https://plnkr.co/edit/MPHT17Hf4xNj3ZuuNXMd?p=preview

以下是专门获取项数据并在'detailItem' JSONModel中设置的代码:

onItemPress: function(evt) {
    var me = this;
    var view = me.getView();
    var item = evt.getSource().getBindingContext('list').getObject();
    view.getModel('detailItem').setData(item);
    var dlg = new sap.m.Dialog({
        title: 'Edit Item',
        type: 'Message',
        content: [
            new sap.m.VBox({
                items: [
                    new sap.m.Label({
                        text: 'Section'
                    }),
                    new sap.m.Input({
                        value: '{detailItem>sectionId}'
                    }),
                    new sap.m.Label({
                        text: 'Cost'
                    }),
                    new sap.m.Input({
                        value: '{detailItem>costId}'
                    })
                ]
            })
        ],
        beginButton: new sap.m.Button({
            text: 'Ok',
            press: function() {
                dlg.close();
            }
        }),
        endButton: new sap.m.Button({
            text: 'Cancel',
            press: function() {
                dlg.close();
            }
        }),
        afterClose: function() {
            dlg.destroy();
        }
    }).open();
}

Plunker很直接。基本上,我想在表格中选择一个项目,打开一个带有几个输入字段的对话框,允许编辑数据。我试图通过设置'detailItem'模型的数据并尝试将输入字段的value属性绑定到相应的数据元素来将输入字段绑定到所选项目。

1 个答案:

答案 0 :(得分:0)

这是一个工作示例(从你的分叉):embed.plnkr.co/ictpCHG0R3H3jtsCmHKW

使用相对绑定语法的方法没问题。但是,我们不需要第二个模型,因此请在对话框中将{detailItem>替换为{list>。然后,我们可以将给定的绑定上下文(从所选项目)设置到对话框,以便可以解析对话框内的相对绑定:

dialog.setBindingContext(item.getBindingContext("list"), "list")

但仅此一点还不够。对话框仍然不会显示所选数据,因为它不是视图的后代,因此"list"模型不为它所知。

解决此问题的一种方法是将对话框添加到视图的dependents聚合或视图中的任何其他控件。这样,模型将传播到对话框。作为奖励效果,当主要控制权被摧毁时,它将被一起销毁:

  

特殊聚合dependents连接到生命周期管理和数据绑定,但不会自动呈现,可用于弹出窗口或其他相关控件或元素。这允许在声明视图中定义弹出控件,并允许将模型和上下文信息传播给它们。 [src]

由于所有控件都提供聚合<dependents>,您还可以将对话框定义从控制器移动到视图。