getBindingContext()未定义

时间:2015-12-23 13:56:39

标签: sapui5

我正在为一项学校作业制作一个小程序,但我遇到了一个问题。 我需要在SAPUI5中创建一个程序,在程序表中加载JSON数据。在每一行上都附加了一个函数(onItemSelected)。因此,当我按下一行时,我需要获得工作日的ID。

这就是程序现在的样子:

Current state

当我按下一行时,它表示我的getBindingContext()未定义。

alert of getBindingContext() being undefined

在我的index.html

sap.ui.getCore().attachInit(function(){
  var oWeekdagModel = new sap.ui.model.json.JSONModel();
  oWeekdagModel.loadData("./model/weekdagen.json");
  sap.ui.getCore().setModel(oWeekdagModel, "week");
});
var oResourceModel = new sap.ui.model.resource.ResourceModel({
  bundleName : "sap.ui.demo.db.i18n.i18n"
});
sap.ui.getCore().setModel(oResourceModel, "i18n");
new sap.ui.core.mvc.XMLView({
  viewName: "sap.ui.demo.db.view.App"
}).placeAt("content");

App.view.xml

<mvc:View
  xmlns:l="sap.ui.layout"
  xmlns:mvc="sap.ui.core.mvc"
  xmlns="sap.m"
  controllerName="sap.ui.demo.db.controller.App"
>
  <Table id="idWeekdagenTable"
    inset="false"
    items="{week>/weekdays}"
  >
    <headerToolbar>
      <!-- ... -->
    </headerToolbar>
    <columns>
      <Column width="20%">
        <Text text="Id" />
      </Column>
      <Column width="20%">
        <Text text="Weekdag" />
      </Column>
      <Column width="20%">
        <Text text="Aantal gewoon eten" />
      </Column>
    </columns>
    <items>
      <ColumnListItem
        press=".onItemSelected"
        type="Active"
      >
        <Text id="id" text="{week>id}" />
        <Text id="day" text="{week>day}" />
        <Text text="{week>no_meals}" />
      </ColumnListItem>
    </items>
  </Table>
  <Table id="idMaaltijdenTable"
    inset="false"
    items="{maaltijd>/meals}"
  >
    <headerToolbar>
      <!-- ... -->
    </headerToolbar>
    <columns>
      <Column width="20%">
        <Text text="Maaltijd" />
      </Column>
      <Column width="20%">
        <Text text="Descriptie"/>
      </Column>
    </columns>
    <items>
      <ColumnListItem
        press=".onItemSelected"
        type="Active"
      >
        <Text text="{maaltijd>MealNo}" />
        <Text text="{maaltijd>items}" />
      </ColumnListItem>
    </items>
  </Table>
</mvc:View>

App.controller.js

sap.ui.define([
  "sap/ui/core/mvc/Controller"
], function (Controller){
  "use strict";

  return Controller.extend("sap.ui.demo.db.controller.App", {
    onInit: function() {
      var oWeekdagModel = new sap.ui.model.json.JSONModel();
      oWeekdagModel.loadData("weekdagen.json");
      //binding op view
      sap.ui.getCore().setModel(oWeekdagModel);
    },

    onItemSelected: function(oEvent) {
      var oItem, oCtx;
      oItem = oEvent.getSource();
      oCtx = oItem.getBindingContext();
      alert(oCtx); // is undefined
    }
  });
});

1 个答案:

答案 0 :(得分:2)

您可以使用绑定路径从模型中提取当天的ID。以下是onItemSelected()函数的相关部分:

...
oCtx = oItem.getBindingContext();
var oPressedItem = sap.ui.getCore().getModel().getProperty(oCtx.getPath());
...

然后oPressedItem.id将从顶部表格中为您提供当天的ID,并从底部表格中提供oPressedItem.dayId

Here是一个有效的例子。