Meteor js - 即使返回结果,控制台也会显示“未定义”

时间:2015-03-27 12:26:48

标签: 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.text.slice(0,120);
        return a+'...';
    }
})

在存档页面上,它列出了120个字符的所有帖子及其shortExcerpt,但它仍然在控制台上返回Undefined:

Exception in template helper: TypeError: Cannot read property 'slice' of undefined

有谁知道这里可能出现什么问题?

3 个答案:

答案 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,即使只包含空字符串。