我在流星应用程序中遇到了一个令人难以置信的荒谬错误。基本上,我有一个特定的页面,它会渲染一些模板,在Mac上崩溃Safari,而且只有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>
以及包含帮助程序和事件处理程序的“pageItem”js文件,例如:
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也没问题。
我是疯了还是做了一些非常错误的逻辑?
编辑:这听起来也很疯狂但是...通过将div中的模板包装在div中似乎解决了问题。为什么会这样?
{{#each pageWithRank}}
<div>
{{> pageItem}}
</div>
{{/each}}
答案 0 :(得分:2)
对于Meteor而言,这似乎不是一个问题,因为它与Safari网络浏览器一样,从个人经验和Safari中的这个问题进行测试。 查看日志和高级调试功能并考虑到问题主要仅存在于Safari和某些情况下IE9中,这是浏览器尝试将传输的数据呈现到页面的方式的问题。
在IE9的情况下,通常只有在未包含html5填充程序时才会发现此错误,并且错误是由于IE9缺少Web而无法正确呈现和解释数据的结果-kit和html5兼容性,如果包含垫片,则通常是IE9兼容模式设置。
在Safari的情况下,问题类似,但不一样,Safari本机支持html5以及web-kit样式格式 这里的问题是Safari中的一个错误,它处理数据的方式,你实际上给它一个项目列表,但它无法连续附加到主div,通过将其封装在自己的子div中,你给它一个更好的要使用的命名空间以及更清晰的渲染位置,我不知道这是苹果内部安全设置的结果还是只是一般渲染错误,但问题的确存在于Safari而不是Meteor