Проблема с созданием Extjs dom и Ext.Element

#dom #extjs

#dom #extjs

Вопрос:

Я создаю элементы с помощью Ext.element следующим образом:

 var table = new Ext.Element(document.createElement('table'));

    for(n=0;n<5;n  )
    {
        row = new Ext.Element(document.createElement('tr'));
        for(x=0;x<4;x  )
        {
            col = new Ext.Element(document.createElement('td'));
            col.update('cell text ' x);    
            row.appendChild(col);
        }
        table.appendChild(row);
    }

    Ext.fly('data').replaceWith(table);
  

Это работает в i FF, но не в IE, почему это?

Ответ №1:

Следующий код работал в IE8 с ExtJS 3.3

 var table = new Ext.Element(document.createElement('table'));

for(n=0;n<5;n  )
{
    var row = new Ext.Element(document.createElement('tr'));
    for(x=0;x<4;x  )
    {
        var col = new Ext.Element(document.createElement('td'));
        col.update('cell text ' x);    
        row.appendChild(col);
    }
    table.appendChild(row);
}

Ext.fly('data').replaceWith(table);
  

Комментарии:

1. Ошибки нет, просто она не создается, она отображается на панели инструментов разработчика, и если я нажимаю «Редактировать» и закрываю «Редактировать», кажется, что dom обновляется, а затем отображается, но это отстой. IE равен 8.

2. @dfilkovi Хорошо, мне нужна дополнительная информация об этой ошибке. Я протестировал код с ExtJS 3.3 в IE8, и все заработало.

3. IE 7, я только что проверил, что мой браузер находится в режиме совместимости, он не работает в IE7, в IE8 работает, но это тоже проблема для меня, он должен работать в обоих браузерах.

4. На данный момент у меня нет времени, и я не нашел решения. Я вернусь к этому позже. На данный момент я не знаю, что там происходит, что изменения не отображаются.

5. Я не могу вам с этим помочь. Вы пытались опубликовать это на форуме sencha?

Ответ №2:

Попробуйте использовать Ext.DomHelper для создания элементов DOM и работы с ними. Ознакомьтесь с документацией DomHelper at Ext API и следуйте этому руководству.

Комментарии:

1. Да, DOM работает, но что, если я хочу добавить пользовательских прослушивателей к элементам, таким как on click, контекстное меню и другим, поскольку я знаю, что это может быть достигнуто только с помощью Ext.Element или я ошибаюсь?

2. Да, у вас будут просто простые элементы DOM, и я не знаю никакого способа получить из них Ext.Element.

3. Чтобы добавить, вы можете управлять своей производительностью, установив Ext.DomHelper.useDom = false , что увеличивает производительность. Проверьте документы о том, как и когда использовать.

Ответ №3:

Это старый пост, но для тех, кто все еще ищет ответы, пожалуйста, проверьте приведенный ниже код, он должен нормально работать в IE.

 var table = new Ext.Element(document.createElement('table'));
var tbody = new Ext.Element(document.createElement('tbody'));
for(n=0;n<5;n  )
{
    var row = new Ext.Element(document.createElement('tr'));
    for(x=0;x<4;x  )
    {
        var col = new Ext.Element(document.createElement('td'));
        col.update('cell text ' x);    
        row.appendChild(col);
    }
    tbody.appendChild(row);
}
table.appendChild(tbody);

Ext.fly('data').replaceWith(table);