我试图在对话框的控件中显示表项的数据。这是一个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
属性绑定到相应的数据元素来将输入字段绑定到所选项目。
答案 0 :(得分:0)
这是一个工作示例(从你的分叉):embed.plnkr.co/ictpCHG0R3H3jtsCmHKW。
使用相对绑定语法的方法没问题。但是,我们不需要第二个模型,因此请在对话框中将{detailItem>
替换为{list>
。然后,我们可以将给定的绑定上下文(从所选项目)设置到对话框,以便可以解析对话框内的相对绑定:
dialog.setBindingContext(item.getBindingContext("list"), "list")
但仅此一点还不够。对话框仍然不会显示所选数据,因为它不是视图的后代,因此"list"
模型不为它所知。
解决此问题的一种方法是将对话框添加到视图的dependents
聚合或视图中的任何其他控件。这样,模型将传播到对话框。作为奖励效果,当主要控制权被摧毁时,它将被一起销毁:
特殊聚合
dependents
连接到生命周期管理和数据绑定,但不会自动呈现,可用于弹出窗口或其他相关控件或元素。这允许在声明视图中定义弹出控件,并允许将模型和上下文信息传播给它们。 [src]
由于所有控件都提供聚合<dependents>
,您还可以将对话框定义从控制器移动到视图。