Chcę wiązać dane JSON do przeglądania, próbowałem jak poniżej:

XML:

<m:Select id="Employee" items="{Employee>/EmployeeList}">
<c:Item key="{Employee>key}" text="{Employee>value}" />
<m:layoutData>
    <l:GridData span="L2 M2 S2"/>
</m:layoutData>

W ten sposób moje dane JSON brzmi:

 var xyz = {
    "Employee": {

        "EmployeeList": [{
                "key": "ram",
                "value": "ram"
            },
            {
                "key": "raj",
                "value": "raj"
            },
            {
                "key": "rani",
                "value": "rani"
            }
        ]
    }
}
var oModel = new sap.ui.model.json.JSONModel();
oModel.setData(xyz);
this.getView().setModel(oModel);

Mam pole wyboru w widoku Chcę pokazać nazwy pracowników jako rozwijane w widoku stronie.

0
Sophie 19 marzec 2020, 10:17

2 odpowiedzi

Najlepsza odpowiedź

Istnieje wiele błędnych założeń:

items="{Employee>/EmployeeList}"

Tutaj zakładasz, że masz model o nazwie {X0}}, która ma atrybut najwyższego poziomu EmployeeList.

W rzeczywistości masz model bez nazwy i z atrybutem najwyższego poziomu Employee.

Masz wybór:

  • Zmień wiązanie
  • Zmień swój model.

Opcja A: Zmień wiązanie:

Jest to Twoja opcja, jeśli nie możesz zmienić modelu (ponieważ pochodzi z twojego zaplecza w ten sposób).

Usuń nazwę modelu z wiązania (ponieważ model nie ma nazwy). Zbuduj odpowiednią ścieżkę do swojej listy. Na szczycie XYZ znajduje się właściwość Employee, która jest obiektem, który ma właściwość EmployeeList.

<m:Select id="Employee" items="{/Employee/EmployeeList}">
    <c:Item key="{key}" text="{value}" />
    <m:layoutData>
        <l:GridData span="L2 M2 S2"/>
    </m:layoutData>
</m:Select>

Opcja B: Zmień swój model

Jeśli nie jesteś zadowolony ze swojej struktury modelu i uważasz, że twoje wiązanie ma sens, możesz także zmienić model.

Najpierw zmień swój obiekt, aby pracownik był twoim górnym strukturą:

 var xyz={   
   "EmployeeList":[  
      {  
        "key":"ram",
        "value":"ram"
      },
      {  
        "key":"raj",
        "value":"raj"
      },
      {  
        "key":"rani",
        "value":"rani"
      }
   ]
}

Podczas ustawiania modelu do widoku należy również podać nazwę, której oczekujesz w wiązaniu:

this.getView().setModel(oModel, "Employee");
4
Marc 19 marzec 2020, 10:35

OK, ustawisz swój model na swoim widoku jako nieznany model. Tak więc prawidłowe wiązanie to:

<m:Select id="Employee" items="{/Employee/EmployeeList}">
    <c:Item key="{key}" text="{value}" />
         <m:layoutData>
                <l:GridData span="L2 M2 S2"/>
         </m:layoutData>
</m:Select>
1
Cmdd 19 marzec 2020, 10:34