Подтвердить что ты не робот

Метеоритный сбой Safari

Я столкнулся с невероятно смешной ошибкой в ​​моем приложении метеоритов. По сути, у меня есть определенная страница, которая отображает несколько шаблонов, что приводит к сбою Safari на Mac и только к Safari (и только когда консоль НЕ открыта).

Я сузил его (несколько) до сценария, который, похоже, помогает решить проблему. Удаление обработки событий на шаблоне "FloorList", указанном ниже. Любые мысли, вопросы, предложения будут высоко оценены.

Я знаю, что это трудно сказать, не видя всего, но здесь примерно настройка:

мы используем железо-маршрутизатор, загружаем основные шаблоны:

<template name="layout">
    <div id="pageWrap">
        {{> yield}}
    </div>
</template>

наш "выход" является шаблоном:

<template name="pageList">
    <div class="pages">
        {{#each pageWithRank}}
            {{> pageItem}}
        {{/each}}
    </div>
</template>

'pageItem загружаются (ограничено возвратом 10 элементов)

<template name="pageItem">
    <div class="page">
      ...
    </div>
</template>

вместе с js файлом "pageItem", который содержит помощники и обработчики событий, например:

Template.pageItem.helpers({
    ...
});

Template.pageItem.events({
    'click .shareable': function(e, template) {
        ...
    },
    'click .share': function(e, template) {
        ...
    },
    'click .removePage': function(e) {
        ...
    }
});

Конфигурация маршрутизатора:

var preloadSubscriptions = [];
preloadSubscriptions.push('notifications');
preloadSubscriptions.push('alerts');
preloadSubscriptions.push('myPages');

var mainYieldTemplates = {
    'footer': { to: 'footer' },
    'header': {to: 'header'}
};


Router.configure({
    layoutTemplate: 'layout',
    loadingTemplate: 'loading',
    yieldTemplates: mainYieldTemplates, 
    waitOn: function() {
        return _.map(preloadSubscriptions, function(sub) {
            if (typeof sub === 'object') {
                Meteor.subscribe(sub.subName, sub.subArguments);
            } else {
                Meteor.subscribe(sub);
            }
        });
    }
});

var coreSubscriptions = new SubsManager({
    cacheLimit: 10,
    expireIn: 1
});

pagesListController = RouteController.extend({
    template: 'pageList',
    increment: 10,
    limit: function() {
        return parseInt(this.params.pageLimit) || this.increment;
    },
    findOptions: function() {
        return {
            sort: this.sort,
            limit: this.limit()
        };
    },
    pages: function() {
        return Pages.find({}, this.findOptions());
    },
    data: function() {
        var hasMore = this.pages().count() === this.limit();
        return {
            pages: this.pages(),
            nextPath: hasMore ? this.nextPath() : null
        };
    },
    onBeforeAction: function() {
        return [
            coreSubscriptions.subscribe('pages', this.findOptions()),
            coreSubscriptions.subscribe('pagesListUsers', this.findOptions())
        ];
    }
});

В настоящее время мы используем 6 кликов по шаблону элемента. Даже если они пусты, Safari может сработать, полностью удалить, Safari в порядке.

Я схожу с ума или делаю что-то ужасно неправильно с этой логикой?

EDIT: Это также звучит сумасшедшим, но... путем обертки шаблонов в каждом выражении с помощью div, похоже, исправлена ​​проблема. зачем это было?

{{#each pageWithRank}}
  <div>
    {{> pageItem}}
  </div>
{{/each}}
4b9b3361

Ответ 1

Это не похоже на проблему с Meteor, как с веб-браузером Safari, из личного опыта и тестирования с этой проблемой в Safari. Глядя на журналы и расширенные функции отладки и принимая во внимание проблему, существует прежде всего только в Safari и в некоторых случаях IE9, это проблема с тем, как браузер пытается передать переданные данные на страницу.

В случае IE9 эта ошибка, как правило, только когда-либо наблюдалась, когда прокладка html5 не включена, а ошибка является результатом того, что IE9 не может правильно визуализировать и интерпретировать данные в результате отсутствия сети -kit и html5, чаще всего, если включена прокладка, проблема заключается в настройках режима совместимости IE9.

В случае Safari проблема аналогична, но не то же самое, Safari поддерживает html5 изначально, а также формат стиля веб-набора Проблема здесь в ошибке в Safari с тем, как она обрабатывает данные, вы по существу даете ей список элементов, но она не может непрерывно присоединяться к главному div, инкапсулируя его в свой собственный sub div, который вы даете ему лучше пространство имен для использования, а также более четкое место для рендеринга, но я не знаю, если это результат внутренней установки безопасности ящиков или просто общая ошибка рендеринга, но проблема действительно заключается в Safari, а не в Meteor