将对象数组解压缩为字符串以显示在流星上的模板上

时间:2014-02-25 03:11:53

标签: javascript meteor

我有一个集合,其中包含一个对象,该对象包含更多对象的数组,这些对象需要解压缩才能最终显示在模板中。

子对象中的项目是一个订单,订单包含一个订单项数组。

我可以将订单排除在外,并看到订单项数组没问题,但这就是我解开的地方。

我认为以下内容可行(使用js将它们转换为字符串数组然后以某种方式显示)

Template.editEvent.helpers({
    lineItems: function(req) {
        var order = req.order;
        console.log(order);
        var lines;
        var count = 1;

        _.each(order, function(item) {
            var string;
            string +count++ + '. ';
            if(item.age) { // we have a cloathing string
                string += item.age + " " + item.sex + " " + item.Season + " " + "Number: " + item.Number;
                lines.push(string);
            }
            else if(item.pushers) {
                string += "Pushers needed: " + item.pushers;
                lines.push(string);
            }
            else if(item.cots) {
                string += "Cots needed: " + item.pushers;
                lines.push(string); 
            }
            else if(items.extra) {
                string = "Extra info: " + item.extra;
                lines.push(string);
            }   
            else {
                string = "Don't know this field";
                lines.push(string);
            }
            console.log(lines);
        });
        return lines;
    }
})

测试的目的是查看订单项是否以显示的字段开头(因为订单项可能不同)。

然而,_.each正在抛弃客户端,(它在启动代码中工作正常,所以我猜它只是它的服务器?)

我是否在这里咆哮错误的树,这个嵌入的对象应该是一个新的集合吗?如果我是对的,我该如何在模板中显示返回的字符串数组(只是想到这一点)?

1 个答案:

答案 0 :(得分:1)

您尚未初始化lines。使用:

var lines = [];

也是,string +count++ + '. '是什么?你的意思是string += count++ + '. '?如果是这样,那么您还需要初始化字符串,例如var string = "";

从你的评论中,我得知你真正想要的是在模板中反应性地显示列表。为此,您可能希望直接使用转换。这是如何工作的。或者,您可以将代码包装成Deps.autorun

HTML(例如edit_event.html):

<template name="editEvent">
    {{lines}}
</template>

Javascript(例如edit_event.js):

Template.editEvent.lines = function() {
    var order = Orders.find(
        {id: Session.get('currentOrder')}, 
        {limit: 1,
         transform: function(order) {
             console.log(order);
             var lines;
             var count = 1;

             _.each(order, function(item) {
                 var string = count++ + '. ';
                 if(item.age) { // we have a cloathing string
                     string += item.age + " " + item.sex + " " 
                         + item.Season + " " + "Number: " + item.Number;
                     lines.push(string);
                 }
                 else if(item.pushers) {
                     string += "Pushers needed: " + item.pushers;
                     lines.push(string);
                 }
                 else if(item.cots) {
                     string += "Cots needed: " + item.pushers;
                     lines.push(string); 
                 }
                 else if(items.extra) {
                     string = "Extra info: " + item.extra;
                     lines.push(string);
                 }   
                 else {
                     string = "Don't know this field";
                     lines.push(string);
                 }
                 console.log(lines);
             });
             return lines;
         }
        })
}