2013-06-05 71 views
2

我試圖在將其存儲到商店之前刪除重複值。我只想在商店1次存儲相同的值。但似乎下面的Ext.Array.unique行不起作用。任何人都可以請幫我解決這個問題。 謝謝extjs在將其存儲到商店之前刪除重複值

var input1store = new Ext.data.Store({ 
    fields: [{name: 'name'}], 
    proxy: { 
     type: 'ajax', 
     url: 'www.requesturl.com?format=json&source1', 
     reader: { 
      type: 'json', 
      root: 'xml.result' 
     } 
    }, 
    autoLoad: false, 
    sorters: [{property: 'name', direction: 'asc'}], 
    listeners:{ 
     load: function(rec){ 
      uniqueArray = Ext.Array.unique(rec.getRange()); 
     } 
    } 
}); 
+0

什麼版本的Ext是這樣的? 3.4? – rixo

+0

這是4.06版本 – shiro

+0

你到底想用這段代碼實現什麼功能?您加載商店,然後將某些內容分配給本地變量。結果應該是什麼? – sha

回答

5

可以使用filterBy方法過濾掉你不希望出現在裝車後存儲記錄。

請注意,商店將保留過濾出的記錄的副本,如果調用clearFilter(可能由您或使用商店的組件),它將恢復。如果您想徹底清除這些記錄,則必須刪除該副本。

Ext.create('Ext.data.Store', { 
    fields: ['name'], 

    // example data 
    proxy: { 
     type: 'memory', 
     data: [{name: 'Foo'},{name:'Bar'},{a:'Baz'},{a:'Foo'},{a:'Bar'}], 
    }, 

    listeners: { 
     load: function(store) { 
      // using a map of already used names 
      const hits = {} 
      store.filterBy(record => { 
       const name = record.get('name') 
       if (hits[name]) { 
        return false 
       } else { 
        hits[name] = true 
        return true 
       } 
      }) 

      // delete the filtered out records 
      delete store.snapshot 
     }, 
    }, 
}) 
+1

我不確定這是一個很好的解決方案,它可以工作,但在再次過濾其他屬性時會出現問題,並且會影響商店中的其他一些操作。也許最好是使用Ajax.request加載數據,過濾並僅將獨特值加載到商店。 –

+0

這就是我告訴自己,這就是爲什麼我編輯我的答案。最初我想通過重寫'loadRecords'來實現,但我認爲這樣做會更容易理解OP。 – rixo

+0

你應該澄清你的第一段來談談你編輯的答案。你的代碼是有道理的,只是更好地描述它。 – Reimius