2016-12-08 57 views
0

我想將數據json綁定到片段包含列表項。SAPUI5綁定數據片段xml

UraianList.fragment.xml:

<core:FragmentDefinition 
    class="sapUiSizeCompact" 
    xmlns="sap.m" 
    xmlns:core="sap.ui.core"> 
    <Dialog 
     noDataText="No Products Found" 
     title="Uraian" 
     search="handleSearch" 
     confirm="handleClose" 
     close="handleClose" 
     items="{ 
      path: 'list>/' 
     }" > 
     <List 
      title="{list>Name}" 
      description="{list>ProductId}" 
      iconDensityAware="false" 
      iconInset="false" 
      type="Active" /> 
    </Dialog> 
</core:FragmentDefinition> 

控制器:

listButton : function(oEvent){ 
     this._oDialog = sap.ui.xmlfragment("com.taspen.acb.modules.Dosir.UraianList", this); 
     this._oDialog.setModel(this.getView().getModel()); 
     this._oDialog.open(); 
     var view = this; 

     var data = [ 
      {"Name":"1","ProductId":"Atasan1"}, 
      {"Name":"2","ProductId":"Atasan2"}, 
      {"Name":"3","ProductId":"Atasan3"} 
      ] 
     var oModel = new JSONModel(data); 
     view.getView().setModel(oModel, "list");  
    } 

我想,當我點擊按鈕(listButton功能),我打開片段和數據綁定到列表中,但數據沒有顯示。如何解決它?

問候, 鮑比

回答

2

你的代碼中有一些錯誤。

  1. Dialog具有聚合「內容」 - 可以存儲任何類型的控件。所以你的列表將進入對話框的'內容'聚合。
  2. 列表具有將保存您的不同類型的ListItems(如StandardListItem,DiaplayListItem,InputListItem等)的聚合項。
  3. 作爲一種很好的做法,將對話框添加到視圖中,以便在對話框中使用視圖中定義的所有模型。

你有某種方式寫了幾乎正確的屬性,但在錯誤的控制。

這裏是校正後的代碼:

片段:

<core:FragmentDefinition 
    class="sapUiSizeCompact" 
    xmlns="sap.m" 
    xmlns:core="sap.ui.core"> 
    <Dialog id="UraianListDialog"> <!-- id provided so I dont have to create new Dialog Everytime --> 
      <content> 
       <List 
       noDataText="No Products Found" 
       title="Uraian" 
       search="handleSearch" 
       confirm="handleClose" 
       close="handleClose" 
       items="{ 
        path: 'list>/' 
       }" > 
        <StandardListItem 
         title="{list>Name}" 
         description="{list>ProductId}" 
         iconDensityAware="false" 
         iconInset="false" 
         type="Active" /> 
       </List> 
      </content> 
     </Dialog> 
</core:FragmentDefinition> 

控制器:

onInit: function() { 
     //Create Models in Init so they are not created everytime you open your dialog 
     var data = [ 
         {"Name":"1","ProductId":"Atasan1"}, 
         {"Name":"2","ProductId":"Atasan2"}, 
         {"Name":"3","ProductId":"Atasan3"} 
         ]; 
        var oModel = new sap.ui.model.json.JSONModel(data); 
        this.getView().setModel(oModel, "list"); 
     }, 

listButton : function(oEvent){ 
     var oView = this.getView(); 
     var oDialog = oView.byId("UraianListDialog"); 
     // create dialog lazily 
     if (!oDialog) { 
      // create dialog via fragment factory 
      oDialog = sap.ui.xmlfragment(oView.getId(), "com.taspen.acb.modules.Dosir.UraianList"); 
      oView.addDependent(oDialog); 
     } 


     oDialog.open(); 
     } 
} 
0

不能在JSONModel數據的根有一個數組

另外你應該添加你的片段作爲你的視圖的依賴,你不需要明確LY設置片段:)模型

查看更新:

<core:FragmentDefinition 
    class="sapUiSizeCompact" 
    xmlns="sap.m" 
    xmlns:core="sap.ui.core"> 
    <Dialog 
     noDataText="No Products Found" 
     title="Uraian" 
     search="handleSearch" 
     confirm="handleClose" 
     close="handleClose" 
     items="{list>/items}" > 
     <List 
      title="{list>Name}" 
      description="{list>ProductId}" 
      iconDensityAware="false" 
      iconInset="false" 
      type="Active" /> 
    </Dialog> 
</core:FragmentDefinition> 

控制器更改爲:從拉胡爾的帖子

listButton : function(oEvent){ 
    var data = { 
     items: [ 
      {"Name":"1","ProductId":"Atasan1"}, 
      {"Name":"2","ProductId":"Atasan2"}, 
      {"Name":"3","ProductId":"Atasan3"} 
     ] 
    } 
    var oModel = new JSONModel(data); 
    this.getView().setModel(oModel, "list"); 

    this._oDialog = sap.ui.xmlfragment("com.taspen.acb.modules.Dosir.UraianList", this); 
    this.getView().addDependent(this._oDialog); 
    this._oDialog.open(); 
} 
+0

的其他改進也是有效的(特別是對話的生命週期) –

+0

喜Kander,我有兩個模型oModel1是用於表格綁定的視圖。 oModel2用於片段綁定。 012.Model(「Table」);這個.getView()。setModel(oModel2,「list」); 這可能嗎? –

+0

yes然後使用{table>/...}和{list>/...}進行綁定 –