Javascript Meteor js-控制台显示';未定义';即使返回结果
我有以下帮助程序可用于简单的帖子归档:Javascript Meteor js-控制台显示';未定义';即使返回结果,javascript,meteor,undefined,Javascript,Meteor,Undefined,我有以下帮助程序可用于简单的帖子归档: Template.archive.helpers({ itens: function () { return Itens.find(); } }); //singleExcerpt is the single item on archive loop Template.singleExcerpt.helpers({ shortExcerpt: function() { var a = this.t
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个字符的简短摘录,但仍然在控制台上返回一个未定义的字符:
Exception in template helper: TypeError: Cannot read property 'slice' of undefined
有人知道这里可能有什么问题吗?使用RegisterHelper
试着这样做:
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>
Template.archive.helpers({
摘录:函数(文本){
如果(文本长度>120){
var a=text.slice(0120);
返回一个“+”…”;
}
返回文本;
}
})
{{{#每个itens}
{{shortextract text}}
{{/每个}}
因此,在问题注释中讨论之后,这恰好是数据存在的问题-一些收集文档根本没有简短摘录
字段
要解决此问题,请使用强制显示此字段,或者自己进行一些数据验证…
您还可以选择在模板中考虑它:
Template.singleExcerpt.helpers({
shortExcerpt: function() {
var a = '';
if(typeof this.text !== 'undefined') {
a = this.text.slice(0,120);
}
return a + '...';
}
});
但是,我建议确保您的所有文件都具有完全相同的结构。在这种情况下,这意味着必须始终定义shortextract
,即使它只包含一个空字符串。那么它实际上可以工作,但在某个点抛出?你是否有一篇文章没有shortextract
字段?也许可以尝试/捕获它并检查哪些帖子抛出。你对Itens
收藏有哪些订阅?这就是问题所在,@Kyll,谢谢你的洞察力!一个简单的如果(this.text){
起了作用。你应该把它作为一个答案发布,这样我就认为你是正确的吗?我对堆栈溢出的工作原理非常陌生。我会在后面测试你的建议,@yaşar-İİİlİ,因为它为显示或不显示“…”带来了一些很好的验证,但我确实用if(this.text)解决了未定义的问题{
只是检查文本是否存在。当然,我们不能分割不存在的内容。
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>
Template.singleExcerpt.helpers({
shortExcerpt: function() {
var a = '';
if(typeof this.text !== 'undefined') {
a = this.text.slice(0,120);
}
return a + '...';
}
});