使用目标将数据从一个视图传递到另一个视图

时间:2015-10-13 04:48:41

标签: sapui5

我是sapui5的新手,我正在尝试使用两个视图创建一个应用程序。使用multicomboBox的视图和另一个带动态表的视图,从multicomboBox中选择项目后,我必须单击提交按钮。在提交按钮单击我必须导航到另一个视图并创建一个具有列名称的表,列名将被选中multicomboBox的值。 我正在使用目标来导航和使用xml视图。 问题是我正在获取所选项目,如何将所选数据传递到另一个视图并创建表格是我面临的问题。
我发布下面的观点和控制器。以下代码取自sapui5 Explored,我结合了multicomboBox和Target Program。提前致谢

View1.xml

A fatal error has been detected by the Java Runtime Environment:
SIGSEGV (0xb) at pc=0x64056842, pid=645, tid=1686977344<br>
JRE version: Java(TM) SE Runtime Environment (7.0_72-b14) (build 1.7.0_72-b14)<br>
Java VM: Java HotSpot(TM) Server VM (24.72-b04 mixed mode linux-x86 )<br>
Problematic frame:<br>
C  0x64056842<br>

Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
An error report file with more information is saved as:
/home/joshua/java_error_in_STUDIO_645.log<br>

/usr/bin/android-studio: line 188:   645 Aborted                 (core dumped) LD_LIBRARY_PATH="$IDE_BIN_HOME:$LD_LIBRARY_PATH" "$JDK/bin/java" $AGENT "-Xbootclasspath/a:$IDE_HOME/lib/boot.jar" -classpath "$CLASSPATH" $VM_OPTIONS "-Djb.vmOptionsFile=$VM_OPTIONS_FILES_USED" "-XX:ErrorFile=$HOME/java_error_in_STUDIO_%p.log" -Djb.restart.code=88 -Didea.paths.selector=AndroidStudio1.4 $IDE_PROPERTIES_PROPERTY $IDE_JVM_ARGS $REQUIRED_JVM_ARGS $MAIN_CLASS_NAME "$@"

View2.xml

<mvc:View 
    xmlns:mvc="sap.ui.core.mvc"
    xmlns="sap.m"
    xmlns:l="sap.ui.layout"
    xmlns:html="http://www.w3.org/1999/xhtml"
    controllerName="sap.ui.core.sample.trial.targetsApp.controller.View1" 
    xmlns:form="sap.ui.layout.form">
     <App>  
        <Page title="Example 1">  
            <MultiComboBox selectionChange="handleSelectionChange" selectionFinish="handleSelectionFinish" width="500px"
  items="{
                    path: '/Collection',
                     sorter: { path: 'Name' }
                }">
  <core:Item key="{ProductId}" text="{Name}" />
  </MultiComboBox>
  <footer>  
                <Bar>  
                    <contentRight>  
                        <Button text="Submit" press="onToView2" />  
                    </contentRight>  
                </Bar>  
            </footer>  

        </Page>  
    </App>  
 </mvc:View> 

view1的控制器

<mvc:View
    xmlns:mvc="sap.ui.core.mvc" 
    xmlns="sap.m"
    xmlns:l="sap.ui.layout"
    xmlns:html="http://www.w3.org/1999/xhtml"
    controllerName="sap.ui.core.sample.trial.targetsApp.controller.View2" 
    xmlns:form="sap.ui.layout.form">
     <App>  
        <Page title="TableView"
  showNavButton="true"
  navButtonPress="onBack"> 
  <footer>  
                <Bar>  
                    <contentRight>  
                        <Button text="Submit" press="onToView2" />  
                    </contentRight>  
                </Bar>  
            </footer>  

        </Page>  
    </App>  
 </mvc:View> 

view2的控制器

sap.ui.define([
        'jquery.sap.global',
        'sap/m/MessageToast',
        'sap/ui/core/mvc/Controller',
        'sap/ui/model/json/JSONModel'
        ], function(jQuery, MessageToast, Controller, JSONModel) {
        "use strict";


        var PageController = Controller.extend("sap.ui.core.sample.trial.targetsApp.controller.View1", {


        onInit: function () {
        // set explored app's demo model on this sample
        var oModel = new JSONModel(jQuery.sap.getModulePath("sap.ui.demo.mock", "/products.json"));
        this.getView().setModel(oModel);
        },


        onToView2 : function () {

        this.getOwnerComponent().getTargets().display("page2");
    },

        handleSelectionChange: function(oEvent) {
        var changedItem = oEvent.getParameter("changedItem");
        var isSelected = oEvent.getParameter("selected");


        var state = "Selected";
        if (!isSelected) {
        state = "Deselected"
        }


        MessageToast.show("Event 'selectionChange': " + state + " '" + changedItem.getText() + "'", {
        width: "auto"
        });
        },


        handleSelectionFinish: function(oEvent) {
        var selectedItems = oEvent.getParameter("selectedItems");
        var messageText = "Event 'selectionFinished': [";


        for (var i = 0; i < selectedItems.length; i++) {
        messageText += "'" + selectedItems[i].getText() + "'";
        if (i != selectedItems.length-1) {
        messageText += ",";
        }
        }


        messageText += "]";


        MessageToast.show(messageText, {
        width: "auto"
        });
        },

        handleNav: function(evt){
        this.getOwnerComponent().getTargets().display("page2");
        }
        });




        return PageController;


       }, true);

已编辑的controller2.js

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


  return Controller.extend("sap.ui.core.sample.trial.targetsApp.controller.View2", {
  onBack : function () {
  this.getOwnerComponent().getTargets().display("page1");
  }
  });


},true);

已编辑的view2.xml

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

    return Controller.extend("sap.ui.core.sample.trial.targetsApp.controller.View2", {

        onInit:function(){
              //console.log(sap.ui.getCore().AppContext.selectedArray);

              //console.log(sap.ui.getCore().AppContext.selectedArray.length);

              var oTable = new sap.m.Table();
              for(var i = 0;i < sap.ui.getCore().AppContext.selectedArray.length;i++){
              oTable.addColumn(new sap.m.Column({
                  demandPopin : true,
                  header:new sap.m.Text({text:sap.ui.getCore().AppContext.selectedArray[i]})
              }));
              }
              //not working i want to place it in view2.xml
              //oTable.placeAt("content");

        },
        displayPress : function(){

             console.log(sap.ui.getCore().AppContext.selectedArray);

              console.log(sap.ui.getCore().AppContext.selectedArray.length);
              console.log(sap.ui.getCore().AppContext.selectedArray[0]);
              console.log(sap.ui.getCore().AppContext.selectedArray[1]);

        },
        onBack : function () {
            this.getOwnerComponent().getTargets().display("page1");
        }
    });

}, true);

1 个答案:

答案 0 :(得分:1)

handleNav功能中使用:

//yourData can be any variable or object
this.getOwnerComponent().getTargets().display("page2", yourData);

在这里阅读更多内容:

显示(vTargets,vData?):sap.ui.core.routing.Targets