2014-03-26 75 views

回答

1

MemoryStore簡單地持有一些任意的數據,當我需要獲得最大的ID,我遍歷所有元素:

var data = store.data 
var maxId = 1 
var idField = 'id' 
for (var i=0;i<data.length;i++) { 
    var row = data[i] 
    if (row[idField] && row[idField] > maxId) 
    maxId = row[idField] 
} 
+0

完美的作品!我很好奇下面這行是如何工作的:'if(row [idField] && row [idField]> maxId)'。你能詳細解釋一下嗎? –

+0

它也適用,如果我只是做'if(row [idField]> maxId)''。 –

2

有很多方法可以做到這一點。例如,您可以進行排序基於ID的存儲和獲得的第一個元素,例如:

store.query({ }, { 
    sort: [{ 
     attribute: "id", 
     descending: true 
    }] 
})[0].id; 

在這個例子中它查詢的所有對象的商店裏面,在ID(降序)對它們進行排序。這顯然意味着第一個元素具有最高的ID,所以您可以獲取該項目並檢索ID屬性。

好處在於它只使用Dojo商店API,這意味着它可以在任何實現了dojo/store API的商店中使用,例如dojo/store/Memory


另一個解決方案是通過自己搜索ID,你可以做到這一點的方式盧卡斯在his answer做了,但是如果你使用store.data這意味着它只能與dojo/store/Memory工作,你訪問屬性你不應該訪問。

所以要自己尋找它,你可以使用:

require([ "dojo/store/Memory", "dojo/_base/array" ], function(Memory, arrUtils) { 
    var maxId = null; 
    arrUtils.forEach(store.query({}), function(obj) { 
     if (maxId === null || (obj !== null && obj.id > maxId)) { 
      maxId = obj.id; 
     } 
    }); 
}); 

這裏會發生什麼事是,我經歷了店內的每個對象,然後我檢查是否maxIdnull(=從未設置),或者如果對象ID大於maxId,如果這是真的,那麼我們用當前對象的ID替換maxId