Sapui5 选择控件不显示模型中的任何选项

Sapui5 选择控件不显示模型中的任何选项,sapui5,Sapui5,我正在尝试使用选择/下拉选项来选择可用的相机。我尝试了多种方法,找到了不同的解决方案。我们公司正在使用JS视图,这使得找到合适的解决方案变得更加困难。因此,我希望这能帮助我 用于获取可用摄影机的代码,使用键和文本创建仅包含摄影机的对象的新阵列,以准备选择: { // ... getCameras:函数{ var camList=[]; navigator.mediaDevices.enumerateDevices.thenfunctioninputs{ inputs.forEachfunctio

我正在尝试使用选择/下拉选项来选择可用的相机。我尝试了多种方法,找到了不同的解决方案。我们公司正在使用JS视图,这使得找到合适的解决方案变得更加困难。因此,我希望这能帮助我

用于获取可用摄影机的代码,使用键和文本创建仅包含摄影机的对象的新阵列,以准备选择:

{ // ... getCameras:函数{ var camList=[]; navigator.mediaDevices.enumerateDevices.thenfunctioninputs{ inputs.forEachfunctioninput{ 如果input.kind==videoinput{ var摄像机={ 键:input.deviceId, 文本:input.label } camList.pushcamera; } }; }; 返回camList; }, } 当我打开相机选项时,我运行此功能:

{ // ... setCameraSelect:函数{ var oController=sap.ui.getCore.byId'Row'.getController; var cameraModel=new sap.ui.model.json.JSONModel; cameraModel.setData{cameras:oController.getcamers}; sap.ui.getCore.setModelcameraModel,'cameramodel'; cameraModel.refresh; }, } 到目前为止,该模型作为cameramodel加载到核心中。我还可以通过以下方式获取:

var model=sap.ui.getCore.getModelcameramodel; console.logmodel.oData; 结果:摄像机:2[{…},{…}]

在我的视图JS中,我得到了以下元素:

var cameraSelect=new sap.m.SelectCameraSelect{ 项目:{ 路径:cameramodel>/cameras, 模板:new sap.ui.core.ListItem{ 键:{cameramodel>key}, 文本:{cameramodel>text} } }, }; 我尝试了不同的版本,有型号名称和没有型号名称。还尝试将模型添加到元素sap.m.Select自身并使用它,包括命名和不命名。但无论我尝试选择什么,菜单都没有提供任何选项。 我在监管什么?查看:

<Select id="selectCamera" forceSelection="false" items="{cameraModel>/}">
    <items>
       <core:Item key="{cameraModel>deviceId}" text="{cameraModel>label}"/>
    </items>
</Select>

在上面的代码中,我将模型绑定到核心,在select项本身找不到模型之后,它开始在那里查找。但我不想不尝试就放弃它。所以每种方法都尝试了一次,但添加后没有任何更改:var cameraSelect=sap.ui.getCore.byId'cameraSelect';cameraSelect.setModelcameraModel;cameraSelect.setModelcameraModel,cameramodel;这是基于以下答案:这是否回答了你的问题?您的应用程序是否使用组件?如中所述,如果视图是组件的后代,则在核心上设置的模型将不会传播到视图。稍微偏离主题:自UI5 v1.90以来,JSView已被弃用。API参考建议改为使用。First和farmost,感谢您花时间提供帮助。不幸的是,这些解决方案存在一些问题。正如前面提到的,我们使用的是JS视图,而不是XML视图。其次,这些函数已经被混搭成一个函数,例如purpose fine,但它没有以任何方式显示问题是什么。问题出在getCameras函数中,因为它的调用者没有采用异步行为。通过使函数异步并使用wait语句和。然后在调用getCamera时,其余的代码可以工作。
navigator.mediaDevices.enumerateDevices().then(function(aInputs) {
  var oCameraModel = new sap.ui.model.json.JSONModel();
  var aItems = [];
  var oSelectCamera = this.getView().byId("selectCamera");

  aInputs.forEach(function(oInput) {
    if (oInput.kind === "videoinput") {
      aItems.push(oInput);
    }
  });
  oCameraModel.setProperty("/", aItems);
  oSelectCamera.setModel(oCameraModel, "cameraModel"); //Bind model to select
}.bind(this));