Sapui5 使用对话框在表中添加新行

Sapui5 使用对话框在表中添加新行,sapui5,Sapui5,在我的应用程序中,我有一些不同颜色的表。 我想通过对话框插入新行。我的想法是创建一个包含表单的对话框片段。 问题是表单没有items元素,我可以在表I中定义单对标签输入的模板 我想要这样的东西: <form:SimpleForm <items> <FormItem> <elements> <Label text="{label}" />

在我的应用程序中,我有一些不同颜色的表。 我想通过对话框插入新行。我的想法是创建一个包含表单的对话框片段。 问题是表单没有items元素,我可以在表I中定义单对标签输入的模板

我想要这样的东西:

<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更易于阅读