我正在开发一个 Meteorjs 应用程序,我有一个教学大纲,我想复制或克隆这个教学大纲。在我的教学大纲中,有一些模块可以达到多个级别,这意味着一个模块可以有另一个模块作为其子模块等等。例如,我有一个模块语法,语法有另一个模块,名为时态和时态,还有一些其他模块,名为现在过去未来这些将看起来像这样。
tenses
past
simple
negative
interogative
present
simple
negative
interogative
future
simple
negative
interogative
数据库字段是 name、parent_id、has_children、syllabus_id 这些mudules 可以进一步包含一些子模块或子模块。在数据库中检查一个模块是否有更多的孩子我有一个布尔字段has_children
并将parent_id
孩子与父母联系起来。如果元素是根元素,它的“parent_id”将为空。
为此,我尝试递归地到达每个元素,但我只能在一个级别到达一个元素。意味着我没有接触到元素的兄弟姐妹,而是孩子。
我的代码是:
cloneSyllabus:function(syllabi_id){
syll_obj=Meteor.syllabi.findOne({_id:syllabi_id});
new_syllabi_id=Meteor.syllabi.insert({
subject_id:syll_obj.subject_id,
level_id:syll_obj.level_id,
});
var parent_objs = Meteor.collecton.find({
parent_id:null,
syllabus_id:syllabi_id}).fetch()
for(var i=0;i<syll_design_objs.length;i++){
makeClone(parent[i],null,new_syllabi_id)
}
}
另一个递归创建对象的函数是
function makeClone(item,parent_id,syllabi_id){
var item_id=item._id
delete item._id
item.parent_id=parent_id
item.syllabus_id=syllabi_id
var new_parent_id=Meteor.syllabi_design.insert(item)
if(item.has_children){
child_items=Meteor.collection.find({parent_id:item_id}).fetch();
for(i=0;i<child_items.length;i++){
makeClone(child_items[i],item_id,syllabi_id);
}
}
}
但是使用它我只能检索同一级别的一个元素,但不能检索其兄弟姐妹。我将能够通过简单的否定疑问句创建时态告诉我在检索这些对象时我在哪里犯了错误。或者告诉我任何其他方式来完成任务。在这里,我只需要更改 syllabus_id 并再次创建所有对象。