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

时间:2014-11-20 08:28:26

标签: sapui5

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

我想要这样的事情:

<form:SimpleForm
    <items>
       <FormItem>
            <elements>
                <Label text="{label}" />
                <Input text="{value}" />
            </elements>
       </FormListItem>
    </items>
</form:SimpleForm>

在表中添加新行的正确方法是什么?

2 个答案:

答案 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的建议,我为每个表创建了一个对话框片段!