Odata SAPUI5-列出项目,查看模型排序问题

Odata SAPUI5-列出项目,查看模型排序问题,odata,sapui5,Odata,Sapui5,我正在进行多个OData实体集读取,并将结果推送到视图模型中 视图模型从问题集获取所有结果,成功后从类别集获取其他几个属性 在EditSurvey视图中,我要做的是加载视图模型中的所有数据(view>/Questions),并按CategoryDesc(从CategorySet推入)对结果进行排序 EditSurvey视图似乎在将CategorySet的结果推入视图模型之前尝试加载模型 有人知道我怎么分类吗 EditSurvey.view.xml 图中显示它获取CategoryDesc,但未按C

我正在进行多个OData实体集读取,并将结果推送到视图模型中

视图模型从问题集获取所有结果,成功后从类别集获取其他几个属性

在EditSurvey视图中,我要做的是加载视图模型中的所有数据(
view>/Questions
),并按
CategoryDesc
(从CategorySet推入)对结果进行排序

EditSurvey视图似乎在将CategorySet的结果推入视图模型之前尝试加载模型

有人知道我怎么分类吗

EditSurvey.view.xml 图中显示它获取
CategoryDesc
,但未按
CategoryDesc
排序:

图中显示了它是按问题集中的属性排序的,而不是按
类别集


您可能实际需要的是服务元数据中
问题集
类别集
的关联和导航属性:


...
...
通过导航属性将
问题集
设置为
类别集


下面是一个工作示例:

  • 它使用具有Productn的⎯⎯⎯1类别
  • 声明性地说出需要什么以及应该如何分类
  • 不需要一行JS代码

进展如何?您能否按照下面的建议实现关联和导航属性?
<List
  noDataText="{i18n>noQuestions}"
  items="{
    path: 'view>/Questions',
    sorter: {
      path: 'CategoryDesc',
      descending: false,
      group: true
    }
  }"
  mode="SingleSelectMaster"
  selectionChange="onQuestionSelect"
>
onInit: function() {
  var oRouter = this.getOwnerComponent().getRouter();
  oRouter.getRoute("EditSurvey").attachMatched(this._onRouteMatched, this);
  // Intialise view model
  var oModel = new JSONModel({
    SurveyName: "",
    SurveyDesc: "",
    ReportingFrom: "",
    Questions: [{ }]
  });
  // Set view model
  this.getView().setModel(oModel, "view");
},

_onRouteMatched: function(oEvent) {
  // Get URL parameters passed from Main Page.
  var oArgs = oEvent.getParameter("arguments");
  // Get view model
  var self = this;
  var view = this.getView();
  var oModel = view.getModel();
  var viewModel = view.getModel("view");
  var viewData = viewModel.getData();
  // Read QuestionSet, populate into view model
  oModel.read("/QuestionSet", {
    filters: [
      new Filter("SurveyId", FilterOperator.EQ, oArgs.SurveyId)
    ],
    success: function(oData) {
      viewData.Questions = oData.results;
      viewModel.setData(viewData);
      // Read CategorySet, get CategoryId & CategoryDesc, populate into view model
      return new Promise(function() {
        _.each(viewData.Questions, function(result, index) {
          var surveyModel = self.getView().getModel();
          surveyModel.read("/CategorySet", {
            filters: [
              new Filter("CategoryId", FilterOperator.EQ, result.CategoryId)
            ],
            success: function(oData) {
              viewData.Questions[index].CategoryId = oData.results[0].CategoryId;
              viewData.Questions[index].CategoryDesc = oData.results[0].CategoryDesc;
              viewModel.setData(viewData);
            },
            error: function(oError) {}
          });
        });
      });
    },
    error: function(oError) {}
  });
  // Read SurveySet, populate into view model
  oModel.read("/SurveySet", {
    filters: [
      new Filter("SurveyId", FilterOperator.EQ, oArgs.SurveyId)
    ],
    success: function(oData) {
      viewData.SurveyName = oData.results[0].SurveyName;
      viewData.SurveyDesc = oData.results[0].SurveyDesc;
      viewData.ReportingFrom = oData.results[0].ReportingFrom;
      viewModel.setData(viewData);
    },
    error: function(oError) {}
  });
},