Sapui5 使用对话框在表中添加新行
在我的应用程序中,我有一些不同颜色的表。 我想通过对话框插入新行。我的想法是创建一个包含表单的对话框片段。 问题是表单没有items元素,我可以在表I中定义单对标签输入的模板 我想要这样的东西:Sapui5 使用对话框在表中添加新行,sapui5,Sapui5,在我的应用程序中,我有一些不同颜色的表。 我想通过对话框插入新行。我的想法是创建一个包含表单的对话框片段。 问题是表单没有items元素,我可以在表I中定义单对标签输入的模板 我想要这样的东西: <form:SimpleForm <items> <FormItem> <elements> <Label text="{label}" />
<form:SimpleForm
<items>
<FormItem>
<elements>
<Label text="{label}" />
<Input text="{value}" />
</elements>
</FormListItem>
</items>
</form:SimpleForm>
在表中添加新行的正确方法是什么?创建一个新的JSONModel属性,该属性包含一个包含要添加的字段的对象,并将其绑定到对话框中。
提交对话框表单后,将该对象添加到对象数组中,即您的“行”我发现这是我的解决方案: 这是我的初始化函数:
onInit: function() {
//set model
var oModel=new sap.ui.model.json.JSONModel();
oModel.loadData("model/modelTabCeScd.json", "", false);
this.getView().setModel(oModel);
this.getView().bindElement("/elements/");
//add editable info in case of new row
var table =this.byId("idDetailsTable");
var aCols= table.getColumns();
for(var i = 0; i<aCols.length; i++){
var bEnabled=oModel.getProperty("/elements/idDetailsTable/cols/"+i+"/enabled/");
aCols[i].getHeader().enabled=bEnabled;
}
}
在这里,我管理新对话框的创建
onPressAddNewRow: function (oEvent) {
if (!this.rowTableDialog) {
this.rowTableDialog = sap.ui.xmlfragment(
"ui5bp.view.fragment.RowTableDialog",
this
);
this.getView().addDependent(this.rowTableDialog);
}
var form =this.rowTableDialog.getContent()[0];
var table =this.byId("idDetailsTable");
var aCols= table.getColumns();
form.removeAllContent();
for(var c = 0; c<aCols.length; c++){
var oCol=aCols[c];
form.addContent(new sap.m.Label({text:oCol.getHeader().getProperty("text")}));
form.addContent(new sap.m.Input({value:"", enabled:oCol.getHeader().enabled, editable:true}));
}
this.rowTableDialog.open();
}
这是我的模型
这个解决方案有效!但在最后,我听取了@quality建议,并为每个表创建了一个对话框片段 好的,但是我有不同的表和不同的列,在对话框中我没有相同的字段标签。这应该不会是一个问题吧?在这种情况下,创建一个与表的目标字段列匹配的新对象,并将该对象添加到JSONModel arrayI了解您的解决方案,但我不想重新创建一个新模型;我希望重用用于绑定表的相同模型。你喜欢我的回答吗@好吧,我不是在说一个新的模型,我是在说一个新的模型属性。这样,您还可以自由地重置值—例如,您在解决方案中如何处理“取消编辑”操作?您正在直接写入表模型属性,因此无法取消。其次,我并不特别喜欢用代码创建表单,我更喜欢用XML创建表单,但这是我个人的爱好,我了解您的用例。我并不是说这是不正确的,这只是一个品味的问题:如果你只需要文本输入,它会工作得很好。但是,如果您需要更多的自由选择、单选按钮等,我会为每个对话框使用单独的对话框XML。从维护的角度来看,这也比通过代码生成的UI更易于阅读