2013-06-21 2 views
0

У меня есть функция, которая добавляет кнопку в div «dettaglio_utenti». После вызова функции с помощью этой командыКак заставить синтаксический разбор (только один раз) кнопки Dojo [Err: виджет уже зарегистрирован]

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); 
}); 

Это работает только в первый раз, когда я показываю страницу. Во второй раз, когда кнопка не разобралась, и я вижу эту ошибку в консоли браузера: dojo/parser::parse() error Error: Tried to register widget with id==apri_mappa but that id is already registered

ответ

1

Когда вы показываете страницу во второй раз, первая страница все равно должна быть частью dom. (Может быть, это функция подсветки, одностраничное приложение?). Поэтому, когда доджо анализирует вторую страницу, она дает ошибку, потому что кнопка с этим идентификатором уже создана.

Я не верю, что предотвращение разбора кнопки второй раз выполнит то, что вам нужно. Я думаю ваши варианты:

  1. Уничтожьте виджеты с первой страницы.
  2. Если вам не нужен идентификатор кнопки, вы можете опустить его, и Dojo создаст идентификатор, который не столкнется.
  3. Если вам нужен идентификатор, вы можете использовать счетчик при использовании идентификатора кнопки.
    id='apri_mappa_' + i где я - счетчик.

Только зная, что вы написали выше, я думаю, что порядок предпочтения - 2,1,3.


EDIT - Как уничтожить виджет

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

Каждый раз, когда я вхожу на эту страницу, я вызываю функцию для создания и разбора кнопки. Я удаляю id на данный момент .. Как я уничтожаю кнопку и повторно разбираю ее? – Angelo

+0

Вам нужно создавать и анализировать каждый раз, когда вы вводите страницу? Как только вы его создали, почему бы просто не использовать его повторно? –

+0

Поскольку переменная vText имеет другие данные и значения, не содержит только кнопку. Другая информация меняется каждый раз, когда я вызываю функцию – Angelo