2013-06-05 66 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