【发布时间】:2014-05-01 09:52:03
【问题描述】:
我正在开发一个 Meteorjs 应用程序,我有一个教学大纲,我想复制或克隆这个教学大纲。在我的教学大纲中,有一些模块可以达到多个级别,这意味着一个模块可以有另一个模块作为其子模块等等。例如,我有一个模块语法,语法有另一个模块,名为时态和时态,还有一些其他模块,名为现在过去未来这些将是这样的。
tenses
past
simple
negative
interogative
present
simple
negative
interogative
future
simple
negative
interogative
数据库字段是
姓名,
parent_id,
有孩子,
教学大纲_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 并再次创建所有对象。
【问题讨论】:
-
您似乎很清楚自己想要做什么。你的实际问题是什么?你有没有尝试过?
-
如果您的对象很简单(没有类或任何东西),请尝试 EJSON.clone。可能就够了。在更复杂的情况下,您需要考虑并编写树遍历:)
-
是的,我尝试了一些方法,我正在编辑问题并在此处发布我的代码
标签: javascript recursion meteor meteorite meteor-up