javascript - Meteoros estrellándose en safari
iron-router (1)
Me he encontrado con un error increíblemente ridículo en mi aplicación de meteoros. Básicamente, tengo una página en particular, que presenta algunas plantillas, que bloquea Safari en una Mac, y solo Safari (y solo cuando la consola NO está abierta).
Lo he reducido (en cierta medida) a un escenario que parece ayudar a solucionar el problema. Eliminando el manejo de eventos en la plantilla ''floorList'' listada a continuación. Cualquier pensamiento, pregunta, sugerencia sería muy apreciada.
Sé que es difícil decirlo sin verlo todo, pero aquí está la configuración:
Estamos usando Iron-Router, carga principal de la plantilla:
<template name="layout">
<div id="pageWrap">
{{> yield}}
</div>
</template>
Nuestro "rendimiento" es una plantilla:
<template name="pageList">
<div class="pages">
{{#each pageWithRank}}
{{> pageItem}}
{{/each}}
</div>
</template>
Las plantillas de ''pageItem'' se cargan (limitado a devolver 10 artículos)
<template name="pageItem">
<div class="page">
...
</div>
</template>
junto con un archivo js "pageItem" que contiene ayudantes y controladores de eventos, por ejemplo:
Template.pageItem.helpers({
...
});
Template.pageItem.events({
''click .shareable'': function(e, template) {
...
},
''click .share'': function(e, template) {
...
},
''click .removePage'': function(e) {
...
}
});
Configuración del enrutador:
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())
];
}
});
Actualmente utilizamos 6 eventos de clic en la plantilla del elemento. Incluso si están en blanco, Safari puede fallar, eliminarse por completo, Safari está bien.
¿Me estoy volviendo loco o haciendo algo terriblemente mal con esta lógica?
EDIT: Esto también suena loco pero ... al ajustar las plantillas en cada declaración con un div parece haber solucionado el problema. ¿Por qué sería eso?
{{#each pageWithRank}}
<div>
{{> pageItem}}
</div>
{{/each}}
Esto no parece ser un problema tanto con Meteor como con el navegador web Safari, desde la experiencia personal y las pruebas con este problema en Safari. Mirar los registros y las funciones avanzadas de depuración y teniendo en cuenta que el problema existe principalmente solo en Safari y en algunos casos IE9, es un problema con la forma en que el navegador intenta representar los datos transmitidos a la página.
En el caso de IE9, normalmente solo se ha observado que este error se produce cuando no se incluye la corrección html5 y el error es el resultado de que IE9 no puede representar e interpretar correctamente los datos debido a que carece del kit web. compatibilidad con html5, la mayoría de las veces, si se incluye el shim, el problema es la configuración del modo de compatibilidad IE9.
En el caso de Safari, el problema es similar, pero no es lo mismo, Safari admite html5 de forma nativa, así como el formato de estilo de kit web. El problema aquí es un error en Safari con la forma en que maneja los datos, básicamente lo está dando. una lista de elementos, pero no se agrega continuamente al div maestro, al encapsularlo en su propio subdiv le está dando un mejor espacio de nombres para usar, así como un lugar más claro para representar, no sé si este es un El resultado de la configuración de seguridad interna de Apple o simplemente un error de render general, pero el problema está en Safari y no en Meteor