may/not 存在的处理和渲染日期
Handling and rendering dates that may/not exist
我的架构与此类似:
Schema.Adviser = new SimpleSchema({
"firstName": {
type: String
}
});
Schema.Orders = new SimpleSchema({
"adviserId": {
type: Object
},
"period": {
type: Date
},
"order": {
type: Number,
min: 0
}
});
我需要像这样渲染 table:
名字 |一月 |二月
鲍勃 | 1 | 0
比尔 | 0 | 1
每个值都是一个输入字段,是editable。
例如,如果 Bob 在 1 月份没有订单记录,我需要 1 月份仍然呈现,理想情况下使用 0,以便有人可以添加 1 月份的订单。
像这样:
months 是要显示的月份数组。每个都遵循以下格式:Mon Feb 01 2016 00:00:00 GMT+0000
{{#each month in months}}
{{#each getOrders}}
{{#if equals month period}}{{order}}{{/else}}0{{/if}}
{{/each}}
{{/each}}
我不仅不能让它工作,而且在花更多时间尝试调试问题之前,我想知道这是否真的是最好的方法。
有什么建议吗?
非常感谢
var months = ['Jan', 'Feb', 'Mar'];
var advisors = [{
ID: 1,
name: 'Bob'
}];
var emptyMonthArray = [0, 0, 0];
orders = [{
advisorID: 1,
period: new Date(),
order: 3
}];
function getAdvisors() {
var returnArray = [];
advisors.forEach(function(a) {
var returnObject = {
name: a.name,
monthData: emptyMonthArray.slice(0)
};
orders.forEach(function(o, i) {
if (o.advisorID === a.ID) {
returnObject.monthData[o.period.getMonth()] = o.order;
}
});
returnArray.push(returnObject);
});
return returnArray;
}
console.log(getAdvisors());
我认为更简洁的方法是创建一个 getAdvisors 助手来处理和转换数据,return 类似
[
{name:'Bill', monthData:[0,1,0,2,...]},
{name: 'Bob', monthData:[...]}
]
用这样的模板可以表达得更简洁:
<tr>
<th>Name</th>
{{#each month in months}}
<th> {{monthname}}</th>
{{end each}}
</tr>
{{#each advisor in getAdvisors }}
<tr>
<td>{{name}}</td>
{{#each monthData in advisor}}
{{td>{{this}}</td>
{{end each}}
</tr>
{{end each}}
编辑:添加了 fiddle https://jsfiddle.net/runjep/1xrp1gfq/(这仅适用于一年中的前 3 个月 ;-) 之后您必须添加 'Apr',...
使用您的 fiddle https://jsfiddle.net/runjep/0qy34pfe/3/ 再次编辑
不幸的是,meteorpad 已关闭,所以这是我认为可行的方法。
{{#each advisers}}
{{firstName}}
{{#each monthData}}
{{this}}
{{/each}}
{{/each}}
我的架构与此类似:
Schema.Adviser = new SimpleSchema({
"firstName": {
type: String
}
});
Schema.Orders = new SimpleSchema({
"adviserId": {
type: Object
},
"period": {
type: Date
},
"order": {
type: Number,
min: 0
}
});
我需要像这样渲染 table:
名字 |一月 |二月
鲍勃 | 1 | 0
比尔 | 0 | 1
每个值都是一个输入字段,是editable。
例如,如果 Bob 在 1 月份没有订单记录,我需要 1 月份仍然呈现,理想情况下使用 0,以便有人可以添加 1 月份的订单。
像这样:
months 是要显示的月份数组。每个都遵循以下格式:Mon Feb 01 2016 00:00:00 GMT+0000
{{#each month in months}}
{{#each getOrders}}
{{#if equals month period}}{{order}}{{/else}}0{{/if}}
{{/each}}
{{/each}}
我不仅不能让它工作,而且在花更多时间尝试调试问题之前,我想知道这是否真的是最好的方法。
有什么建议吗?
非常感谢
var months = ['Jan', 'Feb', 'Mar'];
var advisors = [{
ID: 1,
name: 'Bob'
}];
var emptyMonthArray = [0, 0, 0];
orders = [{
advisorID: 1,
period: new Date(),
order: 3
}];
function getAdvisors() {
var returnArray = [];
advisors.forEach(function(a) {
var returnObject = {
name: a.name,
monthData: emptyMonthArray.slice(0)
};
orders.forEach(function(o, i) {
if (o.advisorID === a.ID) {
returnObject.monthData[o.period.getMonth()] = o.order;
}
});
returnArray.push(returnObject);
});
return returnArray;
}
console.log(getAdvisors());
我认为更简洁的方法是创建一个 getAdvisors 助手来处理和转换数据,return 类似
[
{name:'Bill', monthData:[0,1,0,2,...]},
{name: 'Bob', monthData:[...]}
]
用这样的模板可以表达得更简洁:
<tr>
<th>Name</th>
{{#each month in months}}
<th> {{monthname}}</th>
{{end each}}
</tr>
{{#each advisor in getAdvisors }}
<tr>
<td>{{name}}</td>
{{#each monthData in advisor}}
{{td>{{this}}</td>
{{end each}}
</tr>
{{end each}}
编辑:添加了 fiddle https://jsfiddle.net/runjep/1xrp1gfq/(这仅适用于一年中的前 3 个月 ;-) 之后您必须添加 'Apr',...
使用您的 fiddle https://jsfiddle.net/runjep/0qy34pfe/3/ 再次编辑 不幸的是,meteorpad 已关闭,所以这是我认为可行的方法。
{{#each advisers}}
{{firstName}}
{{#each monthData}}
{{this}}
{{/each}}
{{/each}}