处理和呈现可能/不存在的日期

时间:2016-02-18 11:29:05

标签: mongodb meteor meteor-blaze

我的架构类似于:

Schema.Adviser = new SimpleSchema({
  "firstName": {
  type: String
  }
});

Schema.Orders = new SimpleSchema({
    "adviserId": {
    type: Object
  },
  "period": {
    type: Date
  },
  "order": {
    type: Number,
    min: 0
  }
});

我需要渲染一个这样的表:

名字|一月|二月

鲍勃| 1 | 0

比尔| 0 | 1

每个值都是可编辑的输入字段。

例如,如果一月份Bob没有订单记录,我需要1月仍然呈现,理想情况下为0,这样有人可以添加1月订单。

这样的事情:

月是要显示的一系列月份。每种格式均遵循以下格式: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}}

我不仅无法使用它,而且在花费更多时间尝试调试问题之前,我想知道这是否真的是最好的方法。

有什么建议吗?

非常感谢

1 个答案:

答案 0 :(得分:1)



find /var/www/html/test2 -type f -print0 | xargs -0 sed -i '/model\..*(?:(?!^.:[ ])[\s\S])*\\)/{s//model./g}'




我认为这样做的一个更简洁的方法是创建一个getAdvisors帮助程序,它将处理和转换数据并返回类似

的内容
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());

可以在模板中表达这样的内容:

[
{name:'Bill', monthData:[0,1,0,2,...]},
{name: 'Bob', monthData:[...]}
]

编辑:添加了一个小提琴https://jsfiddle.net/runjep/1xrp1gfq/(这只会在一年的前3个月起作用;-)之后你必须添加' Apr',...

使用你的小提琴https://jsfiddle.net/runjep/0qy34pfe/3/再次编辑 不幸的是,meteorpad已经失败,所以我认为这将起作用。

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