Ich verwende eine verschachtelte Funktion, um zwei Methoden zum Duplizieren einer Reihe von Dokumenten aufzurufen. Die Dokumente stammen aus zwei verschiedenen Sammlungen, sind jedoch wie im Folgenden gezeigt durch das Feld treeBranches verknüpft.forEach über Cursor
Bäume Sammlung
{
_id: "tree_1",
treeBranches: ["branch_1","branch_2"],
...
}
Branchen Sammlung
{
_id: "branch_1",
branchName: "Branch 1",
...
}
{
_id: "branch_2",
branchName: "Branch 2",
...
}
Ich verstehe nicht, wie die _id
jedes bestehenden Filialdokument innerhalb branches.forEach
erhalten. Wenn ich das jetzt ausführe, werden mehrere Zweigdokumente erstellt, aber jeder dupliziert den ersten vorhandenen Zweig unabhängig davon, wie viele existieren. Wie kann ich var currentBranchId = Branches.findOne({})._id;
bearbeiten, um diese _id
zu bekommen und richtig über das Set zu legen?
CODE EDITED einzuarbeiten ANTWORT
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
};
}
});
Danke Michel, auf halbem Weg dort - Sie löste mein erstes Problem mit '(b)' - I didn Ich weiß, dass ich das verwenden könnte, ohne weiter zu definieren, welches Dokument es war. Was Ihre Frage anbelangt, sind die Zweige, die zu jedem Baum gehören, diejenigen, deren IDs im Array 'treeBranches' existieren. Mit dem ersten Teil Ihrer Lösung konnte ich nun eine doppelte Version des Baums und der beiden Zweige erstellen. Aber ich muss die _id, die für jeden Zweig erstellt wurde, von der inneren Funktion an die äußere Funktion übergeben, die zu treebranches in der neuen Struktur hinzugefügt werden soll. Ich kann es nicht in der inneren Funktion tun, da der neue Baum nicht existiert. – Bren
Ich glaube nicht, dass ich den zweiten Block Code brauche, da 1) ich weiß, welchen Baum ich dupliziere und 2) ich alle Dokumente in ihren vorhandenen Sammlungen dupliziere, aber mit neuen IDs. – Bren
Danke Michel, ich werde eine separate Frage zum Übergang zwischen den Funktionen stellen, da ich denke, dass ich hier zu viele Punkte kombiniere. – Bren