SAPUI5:如何从json模型更新视图中的Label?

时间:2017-05-11 06:47:11

标签: sapui5

嗨,每次点击按钮时,我需要帮助在视图中使用json模型中的新值更新我的Label。你如何在SAPUI5中做到这一点?

你可以看到来自问卷模型的问题文本和答案文本我想从数据[0] .question.text更新到数据1。question.text,它显示在我的工具栏文本中。如何在SAPUI5中实现这一目标?

我在问题文本和选项的不同标签上使用了工具栏标题?这是对的吗?我能更新工具栏标题文本吗?

请找到以下代码:

App.view.xml

<mvc:View xmlns:mvc="sap.ui.core.mvc" xmlns="sap.m" xmlns:l="sap.ui.layout" xmlns:f="sap.ui.layout.form" xmlns:core="sap.ui.core"
displayBlock="true" controllerName="opensap.onlinequestionnaire.controller.App" height="100%">
<Page title="Online Questionnaire" class="sapUiContentPadding" id="myPage">
    <headerContent>
        <Button icon="sap-icon://action" tooltip="Share"/>
    </headerContent>
    <subHeader/>
    <content>
        <VBox class="sapUiSmallMargin">
            <f:SimpleForm id="SimpleFormToolbar" layout="ResponsiveGridLayout">
                <f:toolbar>
                    <Toolbar id="TB1">
                        <Title text="Question 1" level="H4" titleStyle="H4"/>
                        <ToolbarSpacer/>
                        <Button icon="sap-icon://drop-down-list"/>
                    </Toolbar>
                </f:toolbar>
                <f:content>
                    <Toolbar design="Solid">
                        <Title text="{questionnaire>/data/0/question/text}" level="H5" titleStyle="H5" textAlign="Center" id="questionText"/>
                    </Toolbar>
                    <VBox id="multipleChoiceHolder">
                        <HBox id="answerRow1">
                            <HBox width="700px" backgroundDesign="Solid" alignItems="Center" id="mCHorHolder1"><CheckBox id="checkBox1"/><Label text="Dogs" id="multipleChoice1"/></HBox>
                            <HBox width="700px" backgroundDesign="Solid" alignItems="Center" id="mCHorHolder2"><CheckBox id="checkBox2"/><Label text="Cats" id="multipleChoice2"/></HBox>
                        </HBox>
                        <HBox id="answerRow2">
                            <HBox width="700px" backgroundDesign="Solid" alignItems="Center" id="mCHorHolder3"><CheckBox id="checkBox3"/><Label text="Rabbits" id="multipleChoice3"/></HBox>
                            <HBox width="700px" backgroundDesign="Solid" alignItems="Center" id="mCHorHolder4"><CheckBox id="checkBox4"/><Label text="Hamsters" id="multipleChoice4"/></HBox>
                        </HBox>
                    </VBox> </f:content>
            </f:SimpleForm>
        </VBox>
    </content>
    <footer>
        <Toolbar id="toolBar">
            <Button text="Previous" type="Emphasized" width="300px" press="goToPrevious" icon="sap-icon://navigation-left-arrow" id="previousButton"/>
            <ToolbarSpacer/>
            <Button text="Next" type="Emphasized" width="300px" press="goToNext" icon="sap-icon://navigation-right-arrow" iconFirst="false"
                id="nextButton"/>
        </Toolbar>
    </footer>
</Page>

questionnaire.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"
], function(Controller){


Controller.extend("opensap.onlinequestionnaire.controller.App", {
    goToPrevious:function(){
        alert("Previous Question");
    },
    goToNext:function(){
        alert("Next Question");
    }
});

});

我的FrontEnd看起来像这样: My Frontend looks like this:

1 个答案:

答案 0 :(得分:0)

我建议您存储当前索引或为当前选定的问题创建单独的模型。 E.g。

this.getView().setModel(new JSONModel({
    index: false,
    question: {}
}), 'currentQuestion');

你可以定义一个init和/或获取下一个元素的方法

initOrSetNext: function() {
  var oCurrentQuestionModel = this.getView().getModel('currentQuestion');
  var oQuestionModel = this.getView().getModel('questionnaire');
  var iCurrentIndex = oCurrentQuestionModel.getProperty('/index');

  // if run first time set to 0 - else increase by one
  iCurrentIndex = iCurrentIndex ? ++iCurrentIndex : 0;

  var oCurrent = {
     index : iCurrentIndex,
     question: oQuestionModel.getProperty('/data/' + iCurrentIndex);
  }
  oCurrentQuestionModel.setProperty('/', oCurrent);
}

回答更新(上图)以显示incease。

缺少的内容:在加载之前检查下一个索引是否存在