0
我正在使用嵌套函數調用兩個方法來複制一組文檔。文檔來自兩個不同的集合,但通過treeBranches字段鏈接,如下所示。for each光標
樹集合
{
_id: "tree_1",
treeBranches: ["branch_1","branch_2"],
...
}
分行收集
{
_id: "branch_1",
branchName: "Branch 1",
...
}
{
_id: "branch_2",
branchName: "Branch 2",
...
}
我不明白如何讓每個現有分支文件_id
內branches.forEach
。現在,當我運行這個時,創建了多個分支文檔,但是每個都重複第一個現有分支,而不管存在多少個分支文檔。我如何編輯var currentBranchId = Branches.findOne({})._id;
以獲得此_id
並正確地循環播放該集?
代碼編輯,以納入ANSWER
Template.Actions.events({
'change .action-selection': function(e) {
e.preventDefault();
var selection = $(e.target).val();
var currentTreeId = this._id;
var branches = Branches.find({_id:{$in:this.treeBranches}});
switch(selection) {
case "tree-repeat":
return Meteor.call('treeRepeat', currentTreeId, function() {
branches.forEach(function(b) {
var currentBranchId = b._id;
Meteor.call('treeBranchesRepeat', currentBranchId, function (branchId) {
});
});
});
break;
…
}
}
});
Meteor.methods({
treeRepeat: function(currentTreeId) {
check(currentTreeId, String);
var tree = Trees.findOne({_id:currentTreeId}, {fields:{_id:0, treeBranches:0}});
var treeExtended = _.extend(tree, {
treeBranches: [?]//NEED IDS FROM NEW BRANCHES
});
var treeId = Trees.insert(treeExtended);
return {
_id: treeId
};
},
treeBranchesRepeat: function(currentBranchId) {
check(currentBranchId, String);
var branch = Branches.findOne({_id:currentBranchId}, {fields: {_id: 0}});
var branchId = Branches.insert(branch);
return {
_id: branchId
};
}
});
謝謝米歇爾,中途有 - 你解決了我的'(B)'第一個問題 - 我沒不知道我可以使用它,而不必進一步定義它是哪個文檔。至於你的問題,屬於每棵樹的分支是那些在'treeBranches'數組中存在id的分支。使用解決方案的第一部分,我現在可以創建樹和兩個分支的重複版本。但我需要將爲每個分支創建的_id從內部函數傳遞到外部函數,以添加到新樹中的treeBranches。由於新樹不存在,我無法在內部函數中執行此操作。 – Bren
我不相信我需要第二塊代碼,因爲1)我知道我複製了哪棵樹,以及2)我複製了其現有集合中的所有文檔,但使用了新的ID。 – Bren
感謝Michel,我將發佈一個關於函數之間傳遞的單獨問題,因爲我認爲我在這裏結合了太多的觀點。 – Bren