2016-09-25 75 views
0

我有一個帶搜索字段的表(多選模式)。有沒有辦法,當我搜索時,搜索結果的值將自動檢查表中的相應行。最初,雖然我可以搜索,但如果結果長度爲1,則在表上執行getItems(),在第一行上執行setSelected = true。該行被選中,但是當我退出搜索時,該行被取消選中。根據輸入搜索的值檢查表格行SAPUI5

 var oSerialTable = new sap.m.Table({ 
      mode: sap.m.ListMode.MultiSelect, 
      columns: [ 
       ... 
      ], 
      items : { 
        path : "/results", 
        template: new sap.m.ColumnListItem({ 
         cells: [ 
         new sap.m.Text({ text: "{Sernr}" }), 
         new sap.m.Text({ text: "{Equnr}" }), 
         new sap.m.Text({ text: "{Lbbsa}" }) 
         ] 
         }) 
      }, 
      select : function(evt){ 

      }, 
      updateFinished: function(){ 
       var aItems = oTable.getItems(); 
       console.log(aItems); 
       if (aItems.length == 1){ 
       console.log(aItems[0]); 
       aItems[0].setSelected(true) 
       } 

      } 
     }); 

     oSerialTable.setModel(ocheckSerialBatchJsonModel); 


     var oSerialTableSearch = new sap.m.SearchField({ 

      search: function(oEvent){ 

      var filterValue = oEvent.getSource().getValue(); 
      var aFilter = new sap.ui.model.Filter("Sernr", sap.ui.model.FilterOperator.EQ, filterValue); 
      var oItemTemplate = new sap.m.ColumnListItem({ 
       cells: [ 
        new sap.m.Text({ text: "{Sernr}" }), 
         new sap.m.Text({ text: "{Equnr}" }), 
         new sap.m.Text({ text: "{Lbbsa}" }) 


       ] 
      }); 

       oSerialTableSearch.bindItems({path:"/SerialSet", template:oItemTemplate, filters: [aFilter]}); 


      } 

     }); 

回答

0

,如果你綁定ColumnListItemselected property到模型這得到更加容易。與JSBin代碼

...  
       template: new sap.m.ColumnListItem({ 
        cells: [ 
        new sap.m.Text({ text: "{Sernr}" }), 
        new sap.m.Text({ text: "{Equnr}" }), 
        new sap.m.Text({ text: "{Lbbsa}" }) 
        ], 
        selected: "{selected}" //Bind selection to model 
        }) 

    ... 

    var oSerialTableSearch = new sap.m.SearchField({ 
     search: function(oEvent){ 
      var filterValue = oEvent.getSource().getValue(); 
      var array = ocheckSerialBatchJsonModel.getProperty("/results"); 
      array.forEach(function(item){ 
       //update selected state of each item 
       item.selected = (item.Sernr == filterValue || item.Equnr == filterValue || item. Lbbsa === filterValue); 
      }); 
      ocheckSerialBatchJsonModel.setProperty("/results",array); //Write back to Model to update bindings 
     } 
    }); 

例: 您可以在模型數據,然後進行過濾和選擇。

+0

謝謝你的這個例子。如果我這樣做,會更容易。問題有沒有一種方式,當用戶搜索時,先前選擇的值仍然存在?所以如果我搜索123,123會被選中,如果我再次搜索124,它也會被選中(123也被選中)。我必須爲我的odata做一個post方法嗎?這就是我的想法。 – melai

+0

如果您添加將代碼更改爲'item.selected =(item.selected || item.Sernr == filterValue || ...)',那麼可以展開選區,以便已選項目將保持選中狀態。 – schnoedel

+0

我明白了!大!感謝您的幫助! – melai