我有一个简单的帖子存档的以下助手:
Template.archive.helpers({
itens: function () {
return Itens.find();
}
});
//singleExcerpt is the single item on archive loop
Template.singleExcerpt.helpers({
shortExcerpt: function() {
var a = this.text.slice(0,120);
return a+'...';
}
})
在存档页面上,它列出了120个字符的所有帖子及其shortExcerpt
,但它仍然在控制台上返回Undefined:
Exception in template helper: TypeError: Cannot read property 'slice' of undefined
有谁知道这里可能出现什么问题?
答案 0 :(得分:0)
使用RegisterHelper http://docs.meteor.com/#/full/template_registerhelper
Template.registerHelper('shortExcerpt', function(text, limit) {
return text.substring(0, limit) + (text.length > limit ? '...' : '');
});
Template.archive.helpers({
itens: function () {
return Itens.find();
}
});
<template name="archive">
{{# each itens }}
{{ shortExcerpt text 150}}
{{/each}}
</template>
使用所有模板
{{ shortExcerpt 'Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit.' 80 }}
--> "Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adi..."
答案 1 :(得分:0)
尝试这样的事情:
Template.archive.helpers({
shortExcerpt: function(text) {
if(text.length>120){
var a = text.slice(0,120);
return a+'...';
}
return text;
}
})
<template name="archive">
{{# each itens }}
{{ shortExcerpt text }}
{{/each}}
</template>
答案 2 :(得分:0)
因此,在问题评论中讨论之后,它恰好是数据存在的问题 - 一些收集文档根本没有shortExcerpt
字段。
要解决此问题,请使用a package such as aldeed:collection2
强制执行此字段,自行进行一些数据验证...
您还可以选择在模板中考虑它:
Template.singleExcerpt.helpers({
shortExcerpt: function() {
var a = '';
if(typeof this.text !== 'undefined') {
a = this.text.slice(0,120);
}
return a + '...';
}
});
但是,我建议确保所有文档的结构完全相同。在这种情况下,这意味着必须始终定义shortExcerpt
,即使只包含空字符串。