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 + '...';
    }
});