2015-01-08 4 views
0

tldr: как вставить один шаблон html в различные места в приложении Meteor JS, каждый из которых использует уникальный контекст данных для определенных маршрутов (используя Iron Router).meteorjs: простой многоразовый шаблон с конкретными контентами данных с использованием 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 и т.д. коллекций, они вставляются в качестве Arg (неправильный термин) в пределах Template.images с помощью dataSource.

Определенные маршруты дают Template.images несколько раз, каждый с уникальным контекстом данных. IOW Мне нужно настроить маршрутизатор/шаблоны для доступа к произвольно многим конкретным 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 послать произвольно много набора данных к одному шаблону и сделать их в различные указанные шаблоны в приложении.

ответ

0

Я бы рассмотреть возможность сделать следующее:

  • Вместо возврата данных из хелперов шаблонов, вы должны рассмотреть Publishing your Collection Data

  • Затем подписаться на данные из жгутов ваши маршруты, используя опция waitOn, а также Returning Templates with Data

Примечание: Помните, что указанные вспомогательные функции доступны только из шаблона «изображения».