我有一个集合,其中包含一个对象,该对象包含更多对象的数组,这些对象需要解压缩才能最终显示在模板中。
子对象中的项目是一个订单,订单包含一个订单项数组。
我可以将订单排除在外,并看到订单项数组没问题,但这就是我解开的地方。
我认为以下内容可行(使用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正在抛弃客户端,(它在启动代码中工作正常,所以我猜它只是它的服务器?)
我是否在这里咆哮错误的树,这个嵌入的对象应该是一个新的集合吗?如果我是对的,我该如何在模板中显示返回的字符串数组(只是想到这一点)?
答案 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;
}
})
}