Sapui5 选择控件没有在动态创建的VBox UI5应用程序中选择项

Sapui5 选择控件没有在动态创建的VBox UI5应用程序中选择项,sapui5,Sapui5,我在VBox中有一个select控件,它是在Controller中动态创建的。 即使我使用了setSelectedItem,视图仍然显示select控件为空,在下拉列表中我看到绑定的值。“创建新记录”和“编辑现有记录”时使用相同的功能。如果我使forceSelection=true,它将显示该项(在编辑中)以及在创建期间(我不希望这样-因为用户可以选择将其保留为空) 为什么下面的代码没有指定所选的值(因此我不必使用forceSelection=true) Controller.js oN

我在VBox中有一个select控件,它是在Controller中动态创建的。 即使我使用了setSelectedItem,视图仍然显示select控件为空,在下拉列表中我看到绑定的值。“创建新记录”和“编辑现有记录”时使用相同的功能。如果我使forceSelection=true,它将显示该项(在编辑中)以及在创建期间(我不希望这样-因为用户可以选择将其保留为空)

为什么下面的代码没有指定所选的值(因此我不必使用forceSelection=true)

Controller.js

    oNewVBox.insertItem(new sap.m.Label({
                text: "{order>/" + Type + "/" + i + "/labelText}",
                required: "{order>/" + Type + "/" + i + "/labelReq}"
            }));

            // If Defaults exist then Field is drodpown
            if (currentValue.DefaultValue !== "") {
                oNewField = new sap.m.Select({
                    enabled: "{order>/" + Type + "/" + i + "/fieldEnabled}",
                    forceSelection: true,
                    width: "90%",
                    // Add dropdoen Items
                    items: [new sap.ui.core.ListItem({
                        key: "{order>/" + Type + "/" + i + "/DefaultValue}",
                        text: "{order>/" + Type + "/" + i + "/DefaultValue}"
                    })],
                    valueState: "{order>/" + Type + "/" + i + "/ValueState}",
                    valueStateText: "{order>/" + Type + "/" + i + "/ValueStateText}"
                });
                // Set key
                oNewField.setSelectedItem("{order>/" + Type + "/" + i + "/value}");
            }

您应该将ID或sap.ui.core.Item对象传递给setSelectedItem函数。您不能像在那里尝试的那样进行绑定。您使用属性或聚合进行数据绑定,但“绑定函数的参数”没有意义

从您的代码中,我猜您正试图使用存储在“订单”模型中的项目“键”来选择您的项目。因此,尝试改变这一点:

oNewField.setSelectedItem("{order>/" + Type + "/" + i + "/value}");
为此

var selectedKey = this.getView().getModel('order').getProperty("/" + Type + "/" + i + "/value")
oNewField.setSelectedKey(selectedKey); // Passing the Item 'key' as selector
//oNewField.setSelectedItem(selectedKey); // Only if in your model you have saved the sap.ui.code.Item ID

您确定选定项的键存在于您的选择控件中吗?@MatthijsMennens当我放置Debuger,并在最后一行后查看控制台时,我看到以下内容:oNewField.getSelectedKey()回答:“{order>/HeaderData/0/DefaultValue}”@Rafael是对的,您只能通过传递控件的ID或该项本身来选择控件中的项。@MatthijsMennens注意到有一个错误,它起作用了。但我的问题是,相同的代码用于创建6个选择框。当我更改任意select中的值时,不会触发任何事件。如果它触发,我可以看到getSource()并知道触发了哪个Select。但如何启动该事件。当我在选择定义中写入change=“selectChanged”时,它不起作用。我在控制台中得到一个错误。如何触发变化?它起作用了。非常感谢。在同样的情况下,还有一个疑问。这个函数在视图中创建了6个下拉列表。我以后如何访问它们?例如,如果下拉值由用户更改,我如何区分触发了哪个select的更改,因为没有ID。此外,如果使用不同的odata绑定值调用同一段代码6次,那么如何为select分配不同的ID?事件处理程序函数通常将事件对象作为参数接收。因此,您可以从那里获取触发事件处理程序函数的源。例如:
onSelectChange(oEvent){var-oSourceControl=oEvent.getSource()}
我想是的,但是如何将更改事件附加到select。在创建select时,我尝试按如下方式正常执行此操作,但即使我更改,也不会调用此函数:oNewField=new sap.m.select({enabled:{order>/“+Type+”/“+I+”/fieldEnabled}),forceSelection:true,change:“valueChanged”,width:“90%”,//添加dropdoen项项:如果我添加change:valueChanged(如我的注释中所示),我会在控制台中收到一个错误。如何触发更改?请尝试以下操作:
change:this.valueChanged