durandal IE8 undefined е null или не е обектна грешка в viewEngine.js

Получавам горната грешка само в IE. редът, който извежда грешката, е очевидно

element.setAttribute('data-view', viewId);

във viewEngine.js

createView: function(viewId) {
        var that = this;
        var requirePath = this.convertViewIdToRequirePath(viewId);
        var existing = this.tryGetViewFromCache(requirePath);

        if (existing) {
            return system.defer(function(dfd) {
                dfd.resolve(existing.cloneNode(true));
            }).promise();
        }

        return system.defer(function(dfd) {
            system.acquire(requirePath).then(function(markup) {
                var element = that.processMarkup(markup);
                element.setAttribute('data-view', viewId);
                that.putViewInCache(requirePath, element);
                dfd.resolve(element.cloneNode(true));
            }).fail(function(err) {
                that.createFallbackView(viewId, requirePath, err).then(function(element) {
                    element.setAttribute('data-view', viewId);
                    that.cache[requirePath] = element;
                    dfd.resolve(element.cloneNode(true));
                });
            });
        }).promise();
    },

редактиране: стесних го до грешката, възникваща между activate() и binding() в жизнения цикъл. Не съм сигурен обаче дали това е от полза.

edit2: при по-нататъшно разследване открих, че processMarkup(markup) не връща HtmlDivElement, както би трябвало и обикновено го прави за всички други модули...


person Martin    schedule 14.07.2015    source източник


Отговори (2)


Изглежда, че IE8 има проблеми с метода setAttribute.

За да разрешите опитайте следното:

Използвайте това като ваш doctype

<!DOCTYPE html>

и след това поставете това в главата на документа

<meta http-equiv="X-UA-Compatible" content="IE=edge" />

Връзка към ресурс: Замяна на setAttribute със съвместим с IE скрипт

person Garry Taylor    schedule 14.07.2015
comment
Благодаря за идеите. Имах зададени тези тагове в моя index.html. И скриптът работи добре с други модули на моето приложение, с изключение на този. Съжалявам, ако публикацията ми е била подвеждаща и не съм публикувал никакъв код от самия модул. Ще редактирам поста си. Първият ред, който публикувах, е част от основния файл на Durandal viewEngine.js, който публикувах под него. - person Martin; 15.07.2015

Намерих грешката и тя не беше част от никакъв javascript код. функцията $.parseHTML() в Durandals viewEngine.js връща обект само ако доставеното HTML маркиране има синтактично правилни HTML тагове. Забравих да затворя един div в самия край на изгледа и това беше проблемът.

person Martin    schedule 15.07.2015
comment
това решение работи за мен. Просто поставях текст без никакви html тагове, така че viewEngine не можа да го анализира като html - person BahaEddine Ayadi; 24.07.2019