У меня есть следующая рекурсивная функция javascript, которая зацикливается на дочерних элементах backbone.marionette CollectionView, у которых есть дочерние элементы ItemView, которые, в свою очередь, являются CollectionViews:
findViewByCid: function(cid, children){
var col = (arguments.length === 1) ? this.children : children;
if(cid in col){
return col[cid];
}
for(child in col){
var grandChildren = col[child].children;
if(cid in grandChildren){
return grandChildren[cid];
}
if(grandChildren && (!jQuery.isEmptyObject(grandChildren))){
return this.findViewByCid(cid, grandChildren);
}
}
}
Я вызываю это так:
var view = DocumentManager.Documents.treeRoot.findViewByCid(model.cid);
Проблема в строке:
return this.findViewByCid(cid, grandChildren);
Если у меня есть такая иерархия
c1
|_c2
|_c3
|_c4
|_c5
Тогда оператор return приведет к выходу функции после прохождения узла th3 c2 и никогда не дойдет до c4 и т. д.
Если я удалю оператор return, будет найден правильный дочерний элемент, но будет возвращено значение null.
Как я могу продолжить анализ иерархии и вернуть значение?