在Meteor中如何将整个对象传递给模板助手?

时间:2015-07-08 00:53:53

标签: javascript meteor

我目前有一个模板助手,用于根据某些逻辑设置表格行的颜色。帮助者需要几个字段才能确定。

<template name="files">
   .
   .
    <thead>...</thead>
    <tbody>
        {{#each files}}
          <tr class="status" style="background-color:{{getStatusColor deleted_on changed_on created_on}}">
            <td>{{_id}}</td>               
            <td>{{created_on}}</td>
            <td>{{changed_on}}</td>
            <td>{{deleted_on}}</td>
          </tr>
        {{/each}}
      </tbody>

(缩写)JS:

Template.files.helpers({
  /* returns background color for row based on file properties */
  getStatusColor: function(deleted_on, changed_on, created_on) {
     if(deleted_on)
       return foo...
     if(changed_on)
       return bar...
  }
});

这很好用,但我需要传递每个单独的属性似乎有点俗气。是否有更简洁的方法来传递整个对象,并从帮助器中引用属性?有点像:

<template name="files">
   .
   .
    <thead>...</thead>
    <tbody>
        {{#each files}}
          <tr class="status" style="background-color:{{getStatusColor this}}">
            <td>{{_id}}</td>               
            <td>{{created_on}}</td>
            <td>{{changed_on}}</td>
            <td>{{deleted_on}}</td>
          </tr>
        {{/each}}
      </tbody>

并在助手中引用属性,如下所示:

Template.files.helpers({
  /* returns background color for row based on file properties */
  getStatusColor: function(obj) {
     if(obj.deleted_on)
       return foo...
     etc.
  }
});

我理解这会让帮助者需要更多地了解有问题的数据对象,但是如果可能的话,我很好奇。

P.S。我对Meteor很新,要温柔。

1 个答案:

答案 0 :(得分:0)

你刚回答了自己的问题。如果您在this循环内传入each,它将传入整个对象。

在模板中:

{{#each files}}
  <tr class="status" style="background-color:{{getStatusColor this}}">
    <td>{{_id}}</td>               
    <td>{{created_on}}</td>
    <td>{{changed_on}}</td>
    <td>{{deleted_on}}</td>
  </tr>
{{/each}}

在client.js文件中:

Template.files.helpers({
  /* returns background color for row based on file properties */
  getStatusColor: function(file) {
     if(file.deleted_on)
       return foo...
     etc.
  }
});