2014-10-17 74 views
1

我是SAPUI5的新手,尋求你的建議來解決一個問題。我的要求是這樣的:參數從一個XMLview(列表)傳遞到另一個SAPUI5上的XMLview(列表)

1st page shows list on XMLview on product. 2nd page shows list on XMLview on storage bin for this product in the warehouse. 3rd page then show the details of storage bin.

我創建了一個OData的,兩個實體類型:產品和斌,都有GetEntitySet實現,我覺得OData的結果是好的。我的問題是在第二個XMLview頁面上,我很難設置sap.m.list上的項目......我的XML看起來像下面這樣,問題在於所有硬編碼,我試圖實現的是將值從產品/工廠/倉庫的第一頁...請告訴我如何解決這個動態的值分配問題。非常感激。

<Page 
    title="Warehouse Storage Bin List" 
    showNavButton="true" 
    navButtonPress="handleNavButtonPress" > 

    <List items="{/Bin?$filter=Lgnum eq 'XXX' and Matnr eq 'XXXXXX' and Werks eq 'XXXX'}"> 
     <ObjectListItem type="Active" 
     press="handleListItemPress" 
     title="{StgeBin}" intro="{StgeType}" number="{Stock}" 
     numberUnit=""> 
      <attributes ObjectAttribute=""></attributes> 
     </ObjectListItem> 
    </List> 

</Page> 

BR,J

回答

0

我假設你已經知道如何在sap.m.頁面之間導航如果這是不是你正在尋找的主要方法(使用sap.m.App,還有更多,如果你使用sap.m.SplitApp):

to(sPageId, sTransitionName, oData, oTransitionParameters) 

注意參數oData - 此可選對象可以攜帶應提供任何有效載荷數據到目標頁面。目標頁面上的「beforeShow」事件將包含此數據對象作爲「數據」屬性。

因此,假設您在第一個視圖上使用sap.m.List來觸發導航到第二個視圖。它看起來是這樣的:

View1.view.xml

<Page title="Products"> 
    <List items="{/Products}" selectionChange="onSelectionChange"> 
     <StandardListItem title="{title}" /> 
    </List> 
</Page> 

View1.controller.js

onSelectionChange : function(oEv) { 
    var oItem = oEv.getParameter("listItem"); 
    var oApp = // get your App 
    // Binding path will be something like "/Products/4" (fifth item selected) 
    oApp.to("view2", "slide", { path : oItem.getBindingContextPath() }) 
} 

View2.controller.js

onInit : function() { 
    var self = this; 
    this.getView().addEventDelegate({ 
    onBeforeShow: function(oEv) { 
     var detailBindingPath = oEv.data.path; 
     // establish view2 bindings based on the selected binding path 
     var oList = self.getView().byId("List"); 
     oList.bindItems(detailBindingPath +"/Bin", <YOUR_TEMPLATE>, null, [ 
     new sap.ui.model.Filter("Lgnum", sap.ui.model.FilterOperator.EQ, 'XXX'), 
     new sap.ui.model.Filter("Matnr", sap.ui.model.FilterOperator.EQ, 'XXXXXX'), 
     new sap.ui.model.Filter("Werks", sap.ui.model.FilterOperator.EQ, 'XXXX') 
     ]); 
    } 
    }); 
} 

你將不得不因爲在視圖創建期間您不知道綁定路徑,所以在代碼中建立綁定。

希望我得到了你想要做的。沒有運行代碼,所以讓我知道你是否面臨問題。

BR Chris

+0

謝謝Chris。我遵循你列出的步驟。然而,我同意你的方法,在View2.controller.js的onBeforeShow中...我沒有在var oList xxxxx行中得到detailBindingPath(在調試中不可用)和「Uncaught TypeError:undefined不是函數」。不知道我是否錯過了任何東西。我嘗試了不同的方式來獲得價值......似乎沒有工作。再次感謝您的幫助。 – Jeff 2014-10-20 13:50:49

+0

我在回答中修改了onInit。您必須將「this」放入匿名函數上下文中(var self = this;)。 oEv是怎樣的? – cschuff 2014-10-20 14:02:45

+0

謝謝克里斯,我通過使用oEv得到了這部分工作。我現在在那個綁定中,感謝你的大力幫助。 – Jeff 2014-10-20 14:44:53

相關問題