在我的应用程序中,我有一些不同cols的表。 我想按对话框插入新行。我的想法是创建一个包含表单的对话框片段。 问题是表单没有items元素,我可以在其中定义单对标签输入的模板(在表I中可以做到)
我想要这样的事情:
<form:SimpleForm
<items>
<FormItem>
<elements>
<Label text="{label}" />
<Input text="{value}" />
</elements>
</FormListItem>
</items>
</form:SimpleForm>
在表中添加新行的正确方法是什么?
答案 0 :(得分:1)
创建一个新的JSONModel属性,该属性包含一个包含要添加的字段的对象,并将其绑定到对话框。 提交对话框表单后,将该对象添加到对象数组中(即您的&#39;行&#39;)
答案 1 :(得分:0)
我发现这是我的解决方案:
这是我的初始化函数:
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();
}
这是我的模型http://jsbin.com/saqorarafo/1/edit?js
此解决方案有效!但最后我听了@Qualiture的建议,我为每个表创建了一个对话框片段!