在运行下面的代码时,我遇到了浏览器崩溃的问题。当我在其内部递归调用函数“ montarMenu.call(this);”时,会出现问题。 如何正确调用该函数。
var SISTEMA = SISTEMA || {};
SISTEMA.MenuPrincipal = (function() {
function MenuPrincipal() {
this.sidebar = $("#sidebarnav");
this.listaMenuJSON = [];
this.strHTML = "";
this.indice = 0;
}
MenuPrincipal.prototype.iniciar = function() {
getJSON.call(this);
}
function getJSON() {
var resposta = $.ajax({
url: '/menus',
method: 'GET',
contentType: 'application/json'
});
resposta.done(onMontarMenuCarregado.bind(this));
}
function onMontarMenuCarregado(JSON) {
this.listaMenuJSON = JSON;
while (this.indice < this.listaMenuJSON.length) {
if (this.listaMenuJSON[this.indice].menuPai == null) {
montarMenu.call(this);
}
this.indice++;
}
this.sidebar.html(this.strHTML);
}
function montarMenu() {
var itemMenu = this.listaMenuJSON[this.indice];
var numeroColunas = ((itemMenu.numeroColunas == null || !itemMenu.numeroColunas.trim()) ? "" : " class='"+itemMenu.numeroColunas+"'");
this.strHTML = "<li"+numeroColunas+">";
if (itemMenu.menuPai == null) {
this.strHTML+="<a class='has-arrow' href='"+((itemMenu.url == null || !itemMenu.url.trim()) ? '#' : itemMenu.url)+"' aria-expanded='false'><i class='mdi "+itemMenu.icone+"'></i>";
this.strHTML+="<span class='hide-menu'>"+itemMenu.nome+" </span>";
} else {
this.strHTML+="<a class='has-arrow' href='#' aria-expanded='false'>";
this.strHTML+=itemMenu.nome;
}
this.strHTML+="</a>";
this.strHTML+="<ul aria-expanded='false' class='collapse'>";
this.indice++;
while (this.indice < this.listaMenuJSON.length) {
if (this.listaMenuJSON[this.indice].menuPai == null) {
break;
}
if (itemMenu.id == this.listaMenuJSON[this.indice].menuPai.id && this.listaMenuJSON[this.indice].possuiSubmenu == false) {
this.strHTML+="<li><a href='"+((this.listaMenuJSON[this.indice].url == null || !this.listaMenuJSON[this.indice].url.trim()) ? '#' : this.listaMenuJSON[this.indice].url)+"'>"+this.listaMenuJSON[this.indice].nome+"</a></li>";
} else {
if (this.listaMenuJSON[this.indice].possuiSubmenu == true) {
montarMenu.call(this);
}
}
}
this.strHTML+="</ul>";
this.strHTML+="</li>";
}
return MenuPrincipal;
}());
$(function() {
var menuPrincipal = new SISTEMA.MenuPrincipal();
menuPrincipal.iniciar();
});
答案 0 :(得分:0)
如果要调用一个函数,就像调用任何其他函数一样调用它:
montarMenu(this);