如何强制解析(仅一次)Dojo';s按钮[错误:小部件已注册]

如何强制解析(仅一次)Dojo';s按钮[错误:小部件已注册],dojo,ibm-mobilefirst,Dojo,Ibm Mobilefirst,我有一个函数,可以在div“dettaglio_-tenti”中添加一个按钮。使用此指令调用函数后 tab+="<button data-dojo-type='dojox.mobile.Button' id='apri_mappa' onClick=\" location.href='tel:"+telefono+"'\">apri mappa</button>" var vText = document.getElementById("dettaglio_utente

我有一个函数,可以在div“dettaglio_-tenti”中添加一个按钮。使用此指令调用函数后

tab+="<button data-dojo-type='dojox.mobile.Button' id='apri_mappa' onClick=\" location.href='tel:"+telefono+"'\">apri mappa</button>"

var vText = document.getElementById("dettaglio_utente");
    vText.innerHTML = tab;

require(["dojo/parser"], function(parser){
    parser.parse(vText);
});
tab+=“apri mappa”
var vText=document.getElementById(“dettaglio_-utene”);
vText.innerHTML=tab;
require([“dojo/parser”],函数(解析器){
parser.parse(vText);
});

它只在我第一次显示页面时起作用。第二次未解析按钮时,我在浏览器控制台中看到此错误:
dojo/parser::parse()错误:尝试使用id==apri\u mappa注册小部件,但该id已注册

当第二次显示页面时,第一个页面必须仍然是dom的一部分。(这可能是worklight功能,单页应用?)。因此,当dojo解析第二个页面时,它会给出错误,因为已经创建了具有该id的按钮

我不相信阻止第二次解析按钮将实现您需要的功能。我认为你的选择是:

  • 从第一页销毁小部件
  • 如果按钮上不需要id,可以省略它,Dojo将创建一个不会冲突的id
  • 如果您需要id,您可以在发出按钮id时使用计数器。
    id='apri\u mappa'+i
    其中i是计数器
  • 只有知道你上面写的,我认为优先顺序是2,1,3


    编辑-如何销毁小部件

    require(['dijit/registry'], function(registry) {
        registry.byId('apri_mappa').destroy();
    });
    

    每次我进入这个页面,我都会调用create和parse按钮的函数。我现在删除id。。我如何销毁按钮并重新解析它?每次进入页面时是否需要创建并解析它?一旦创建了它,为什么不重用它呢?因为variabile vText有其他数据和值,而不仅仅包含按钮。每次调用函数时,其他信息都会发生变化。您以前是否构建过自定义小部件?我认为一个更好的解决方案是创建一个定制的模板小部件,而不是通过串接字符串来构建内容。有了自定义小部件,这个问题就会消失,但我知道可能有外部因素(时间等)会阻止你走这条路。