Как удалить все виджеты Dojo с идентификатором, начинающимся с xyz

У меня есть scrollableViews с именем идентификатора, например idname1, idname2, idname88 и т. д. Я хочу уничтожить все виджеты с именем идентификатора, начинающимся с «idname».

Я пробовал это:

var widgets = dijit.findWidgets("id^=divNodes");
dojo.forEach(widgets, function(w) {
w.destroyRecursive(false);

Кажется, я не могу использовать dijit.findWidgets("id^=divNodes") для этого.

Что для этого подойдет?


person user2219190    schedule 20.06.2013    source источник


Ответы (1)


Из документов...

register.findWidgets возвращает массив всех невложенных виджетов внутри данного узла DOM.

https://dojotoolkit.org/reference-guide/1.8/dijit/registry.html

Вы можете перебрать реестр самостоятельно

require(["dojo/_base/array", "dijit/registry"], function(array, registry){
    var startsWith = function(wholeString, lookFor) {
        return wholeString.slice(0, lookFor.length) == lookFor}
    };

    var toDestroy = array.filter(registry.toArray(), 
        function(w) { return startsWith(w.id, 'divNodes'); });

    array.forEach(toDestroy, function(w) { w.destroyRecursive(false); });
});
person Craig Swing    schedule 20.06.2013
comment
Однако, если у вас есть вложенные виджеты, вам следует отфильтровать всю коллекцию виджетов, которую вы можете получить с помощью register.toArray(). - person Philippe; 20.06.2013
comment
Это то, что я использовал в коде выше. Вы говорите, что должно быть иначе? - person Craig Swing; 20.06.2013
comment
Ой, простите, мой плохой... Я просматривал реестр. найти виджеты в разделе "Из документации"... в следующий раз дочитаю до конца :-) - person Philippe; 21.06.2013
comment
Не волнуйтесь. Я просто хотел убедиться, что мне не дали неверный совет. - person Craig Swing; 21.06.2013