2016-05-11 43 views
0

我在路由時將Master視圖的參數傳遞給Detail視圖,但將其視爲未定義。SAPUI5:獲取參數爲undefined,從一個視圖到另一個視圖的路由傳遞

代碼從MasterController.js

onPressItemDetail: function(evt) { 
    var object = evt.getSource(). 
    getBindingContext(). 
    getModel(). 
    getProperty(evt.getSource().getBindingContext().getPath()); 

    var context = { 
     object: object, 
     bindingContext: evt.getSource().getBindingContext() 
    }; 
    var oRouter = sap.ui.core.UIComponent.getRouterFor(this); 
    oRouter.navTo("fourth", context); 
} 

DetailController.js

onInit: function() { 
    var oRouter = sap.ui.core.UIComponent.getRouterFor(this); 
    oRouter.attachRouteMatched(function(oEvent) { 
     if (oEvent.getParameter("name") !== "fourth") { 
      return; 
     } 
     var object = oEvent.getParameter("arguments").object; 
     var bindingContext = oEvent.getParameter("arguments").bindingContext; 

    }, this); 
} 

路由配置碼從Component.js

"routing": { 
    "config": { 
     "routerClass": "sap.m.routing.Router", 
     "viewType": "XML", 
     "viewPath": "umicoreMP.view", 
     "controlId": "app", 
     "controlAggregation": "pages" 
    }, 
    "routes": [{ 
     "pattern": "", 
     "name": "first", 
     "target": "first" 
    }, { 
     "pattern": "secondview", 
     "name": "second", 
     "target": "second" 
    }, { 
     "pattern": "thirdview", 
     "name": "third", 
     "target": "third" 

    }, { 
     "pattern": "changeitem", 
     "name": "fourth", 
     "target": "fourth" 
    }], 
    "targets": { 
     "first": { 
      "viewName": "FirstView" 
     }, 
     "second": { 
      "viewName": "SecondView" 
     }, 
     "third": { 
      "viewName": "ThirdView" 
     }, 
     "fourth": { 
      "viewName": "ChangeItem" 
     } 
    } 
} 
+0

這看起來特定於框架,如果你用框架的標籤標記它,或者至少鏈接到你正在使用的特定框架,這將是有用的。 – riscarrott

+0

謝謝。線程已更改。 –

回答

0

路線圖案必須包含以下列格式所需的參數:

{ 
    "pattern": "changeitem/{object}", 
    "name": "fourth", 
    "target": "fourth" 
} 

oRouter.navTo()包含所需路徑和其中包含的路由的參數的對象:

oRouter.navTo("fourth", {object: property}); 

傳遞的BindingContext作爲參數不推薦(在這種情況下不可能),因爲它是一個對象,並且在URL中傳遞對象是不安全的。

如果要訪問屬於傳遞給Detail視圖的屬性的數據,可以從模型中獲取它。

假設您的模型已分配給組件,每個視圖都可以訪問該組件。在這裏,您可以將模型的觀點正確的入口結合在幾個方面,例如:

oRouter.attachRouteMatched(function (oEvent) { 
    if (oEvent.getParameter("name") !== "fourth") { 
    return; 
    } 
    var object = oEvent.getParameter("arguments").object; 
    this.getView().bindElement({path: object, model: "nameOfTheModel"}); 
} 

路徑的精確值取決於模型(JSONModel或ODataModel)。型號名稱應在component.js中定義。

有了這個bindElement函數調用,您可分配模型視圖的特定行,所以在視圖控件可以訪問與相對結合所選擇的數據輸入的特性:

<Text text="{propertyInModel}" /> 
相關問題