meteorjs:使用Iron Router的具有特定于路由的数据上下文的简单可重用模板

时间:2015-01-08 01:51:23

标签: javascript meteor handlebars.js meteor-blaze

tldr:如何在Meteor JS应用程序的各个位置插入单个html模板,每个模板使用指定路径的唯一数据上下文(使用Iron Router)。

Template.images

<template name="images">
  {{#each dataSource }}
    <img id="{{ id }}" src="{{ src }}">
  {{/each}}
</template>

dataSource是数据的位置:helpers.js 此处假设Template.images应该是帮助者(数据)的来源,因为它们最终会在此处呈现模板。

Template.images.helpers({
  funData: function () {
    return [
      { id: 'fun' , src : 'fun/pink.png' },
      { id: 'fun' , src : 'fun/blue.png' }
    ]
  },
  painData: function () {
    return [
      { id: 'pain' , src : 'pain/black.png' },
      { id: 'pain' , src : 'pain/gray.png' },
      { id: 'pain' , src : 'pain/moargrey.png' },
      { id: 'pain' , src : 'pain/white.png' }
    ]
  },
  loveData: function () {
    return [
      { id: 'love' , src : 'love/orange.png' },
      { id: 'love' , src : 'love/yellow.png' },
      { id: 'love' , src : 'love/blue.png' }
    ]
  }
}); 

我有很多这些fooData,barData等集合,它们通过Template.imagesdataSource内作为arg(错误术语)插入。

某些路由多次产生Template.images次,每次路由都有唯一的数据上下文。我将需要配置路由器/模板以访问任意多个特定dataSources我可以这样做吗?

<template name="myTemplate1">
  <h1>FUN</h1>  
  {{> images funData }}
</template>

<template name="myTemplate2">
  <h1>PAIN and LOVE</h1>  
  {{> images painData loveData }}
</template>

然后在我的路由器(或控制器?)中,例如:

Router.map({

  this.route('myTemplate1', {
    data : function () {        // 1. set data context
      dataSource : funData      // how to set this?! 
    }
  })

  this.route('myTemplate2', {
    data : function () {         // 2. fetching multiple helpers?
      dataSource : [painData,loveData]      // set to array ?! 
    }
  })
})

摘要:如何使用Meteor JS将任意多个数据集发送到同一个模板,并在整个应用程序中以各种指定模板呈现它们。

1 个答案:

答案 0 :(得分:0)

我会考虑做以下事情:

附注:请记住,您定义的辅助功能只能通过“图像”模板访问