Я столкнулся с невероятно смешной ошибкой в моем приложении метеоритов. По сути, у меня есть определенная страница, которая отображает несколько шаблонов, что приводит к сбою 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}}