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

редактировать: я сузил его до ошибки, возникающей между активацией () и привязкой () в жизненном цикле. Хотя не уверен, что это поможет.

edit2: после дальнейшего исследования я обнаружил, что processMarkup (разметка) не возвращает HtmlDivElement, как должен, и обычно делает это для всех других модулей...


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


Ответы (2)


Похоже, у IE8 есть проблемы с методом setAttribute.

Для решения попробуйте следующее:

Используйте это как ваш тип документа

<!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