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}}