我正在使用最新版本的ember-cli,ember-data,ember-localstorage-adapter和ember。Ember store不正確地添加屬性
我有一個Node
有一個父母和子女的對象。由於我用相同類型的對象創建多個關係時遇到了問題,因此我決定將parentID存儲在一個字符串中,並將childID存儲在一個字符串數組中。但是,當我創建一個新節點並嘗試將新節點添加到父節點ID數組中時,ID最終會添加到正確的父節點,但也會添加到其他父節點。
level 1 0
/\
level 2 1 2
| |
level 3 3 4
在這樣的結構中,0,1和2都有正確的子和父ID。但是,添加3和4後,節點1和節點2的childID分別爲[3,4],而不是[3],[4]。
的陣列屬性:
var ArrayTransform = DS.Transform.extend({
serialize: function(value) {
if (!value) {
return [];
}
return value;
},
deserialize: function(value) {
if (!value) {
return [];
}
return value;
}
});
的insertNode代碼:其所執行如預期的時間
insert: function(elem) {
var i,
_store = elem.node.store,
newNodeJSON = elem.node.serialize();
newNodeJSON.childIds = [];
newNodeJSON.level = getNextLevel();
_store.filter('node', function(node) {
return node.get('level') === newnodeJSON.level-1;
}).then(function(prevLevelNodes) {
// if no other nodes yet
if (prevLevelNodes.toArray().length === 0) {
makeNewNode(_store, newNodeJSON, elem.node);
}
// else, generates however many nodes that are in the previous level
else {
prevLevelNodes.toArray().forEach(function(node, idx) {
newNodeJSON.parentId = node.get('id');
makeNewNode(_store, newNodeJSON, elem.node);
});
}
});
}
var makeNewNode = function(_store, newNodeJSON, node) {
console.log(newNodeJSON.parentId); // returns correct value
var newNode = _store.createRecord('node', newNodeJSON);
newNode.save();
var newNodeId = newNode.get('id');
if (newNode.get('parentId')) {
_store.find('node', newNode.get('parentId')).then(function(n) {
var cids = n.get('childIds');
console.log(newNodeId); // returns expected value
console.log(cids); // **DOESN'T RETURN AN EMPTY ARRAY**: returns array with [3,4]
cids.push(newNodeId);
console.log(n.get('childIds')); // returns array with [3,4]
n.save();
});
}
頂部這一關,該錯誤發生90%的時間,但10%的。這似乎表明存在某種競爭條件,但我不確定哪裏會出現這種情況。有些地方,我覺得可能會造成問題:ember-cli
編譯,在創建新節點時傳遞整個_store
,ember-data
很奇怪,ember-localstorage-adapter
很怪異...沒有線索。