6
votes

I am working on a SplitApp. On selecting an item from the list, it says

Uncaught TypeError: Cannot read property 'getPath' of undefined

Master.controller.js

onSelect: function(oEvent) {
  this.showDetail(oEvent.getParameter("listItem") || oEvent.getSource());
},

showDetail: function(oItem) {
  // ...
  this.getRouter().navTo("detail", {
    from: "master",
    entity: oItem.getBindingContext().getPath().substr(1), // Error
    tab: this.sTab
  }, bReplace);
},

oItem.getBindingContext() returns undefined. So I believe the problem is with binding context.

Master.view.xml

<List id="list" growing="true" items="{data>/results}">
  <ObjectListItem id="listItem"
    title="{myModel>PROJECTNAME}"
    number="{myModel>REVENUE}"
    numberUnit="{myModel>CURRENCY}"
    press=".onSelect"
  />
</List>

Component.js

// JSONModel required from "sap/ui/model/json/JSONModel"
var oModel= new JSONModel();
oModel.loadData("Data.json");
this.setModel(oModel,"myModel");

The list is displayed but when I select the item, the error is thrown.

2

2 Answers

11
votes

getBindingContext(sModelName?)

Get the binding context of this object for the given model name. If the object does not have a binding context set on itself and has no own Model set, it will use the first binding context defined in its parent hierarchy.

You have given name to the model (this.setModel(oModel, "myModel")). Specify the model name (oItem.getBindingContext("myModel")) to access the binding context.

The same applies to setBindingContext(oContext, "myModel").

4
votes

Try:

oItem.getBindingContext("myModel").getPath().substr(1)

You have to pass the name of the model to getBindingContext, if the bound model has been named.