Sapui5 如何在我的控制器中获取JSONModel的属性?

Sapui5 如何在我的控制器中获取JSONModel的属性?,sapui5,Sapui5,我需要在控制器中检索JSONModel的属性。 情况如下: 我有一个“问卷”模型(questionly.json),其中包含问题和答案。然后我有一个控制器(App.controller.js)。 在这个控制器中,我在onInit中创建了另一个名为“currentQuestion”的模型,因为我需要实现一个场景,当用户单击next按钮时,应该加载下一个问题。 我试图获取我的“问卷”模型的属性,但我遇到了一个错误: 无法读取未定义的“getProperty”的属性 您可以在此处看到模型数据和我的控制

我需要在控制器中检索JSONModel的属性。 情况如下:

我有一个“问卷”模型(questionly.json),其中包含问题和答案。然后我有一个控制器(App.controller.js)。 在这个控制器中,我在onInit中创建了另一个名为“currentQuestion”的模型,因为我需要实现一个场景,当用户单击next按钮时,应该加载下一个问题。 我试图获取我的“问卷”模型的属性,但我遇到了一个错误:

无法读取未定义的“getProperty”的属性

您可以在此处看到模型数据和我的控制器:

问卷调查。json

{
    "data": [{
        "question": "Which pet do you like from the following?",
        "answers": ["Cats", "Rabbits", "Dogs", "Hamsters"],
        "correct": 1
    }, {
        "question": "Which pet do you prefer from the following?",
        "answers": ["Cats", "Dogs"],
        "correct": 1
    }, {
        "question": "What food brand does your pet eat?",
        "answers": ["Pedigree", "Catfood", "Rabbitfood", "HamstersFood"],
        "correct": 1
    }]
}
App.controller.js

sap.ui.define([
    "sap/ui/core/mvc/Controller",
    "sap/ui/model/json/JSONModel"
], function(Controller, JSONModel){

    Controller.extend("opensap.onlinequestionnaire.controller.App", {
        onInit: function() {
            this.questionSetUp();
            this.getView().setModel(new JSONModel({
                    index: false,
                    question: {}
            }), "currentQuestion");

            var oCurrentQuestionModel = this.getView().getModel("currentQuestion");
            var oQuestionModel = this.getView().getModel("questionnaire");
            var iCurrentIndex = oCurrentQuestionModel.getProperty("/index");
            var oQuestion = oQuestionModel.getProperty("/data/0/question");
            console.log(oQuestion);
            console.log(iCurrentIndex);
            iCurrentIndex = iCurrentIndex ? ++iCurrentIndex : 0;
            console.log(iCurrentIndex);
        }
    });
});
当我试图在
oQuestion
中询问属性时,它会抛出错误。如何获取第0个元素的question属性的值?

方法setModel(oModel,sName?)将模型设置到视图中。在代码中,将名为“currentQuestion”的模型设置为包含questionly.json文件中数据的视图。您可以在变量oCurrentQuestionModel中获得此模型。 请尝试通过以下代码从此模型获取属性:
oCurrentQuestionModel.getProperty(“/data/0/question”)

在您的代码片段中,不清楚oQuestionModel是在哪里定义的。

。我认为你应该改变

var oQuestionModel = this.getView().getModel("questionnaire");

因为您没有命名模型,所以它将成为默认模型

还有一件事我做错了,那就是我试图在init中得到这个模型

不幸的是,是的。这实际上是本例中模型未定义的主要原因。但不是因为模型没有加载。 我们知道应用程序描述符(manifest.json)中定义的模型以及这些模型会传播到组件的子组件。因此,从任何控制器调用
view.getModel
都应该无缝地返回模型,因为它是在组件上全局设置的但是:组件上设置的模型不能通过使用相应的视图在任何控制器的
onInit
中检索,因为。在
onInit
中调用
view.getParent
将返回
null
。所以组件模型“调查问卷”还没有传播到您的视图中。正如您已经做的那样,通过使用组件而不是视图:
this.getOwnerComponent().getModel(“modelName”)
和错误代码,可以在
onInit
中轻松检索此类组件模型

无法读取未定义的“getProperty”的属性


已消失。

oQuestionModel获取Model inventory.json,它是清单中我的json命名模型。您可以发布manifest.json和错误消息吗?我解决了它,我需要使用
var oQuestionModel=this.getOwnerComponent().getModel(“调查问卷”)
获取命名模型,然后使用getProperty检索属性,如下所示:
oQuestionModel.getProperty(“/data/0/question”)
我还做错了一件事,那就是我试图在init()中获取此模型,我想它给出我未定义的原因是因为模型未加载。所以我用不同的方法调用它,得到了结果。感谢您的帮助。通常您在manifest.json中定义模型,然后可以通过以下方式轻松访问它:
oController.getView().getModel(nameInManifest.json)
var oQuestionModel = this.getView().getModel();