2015-10-17 2 views
1

У меня есть два шаблона с таблицамиГде должны находиться нестандартные помощники в Метеор?

<template name="table1"> 
    <table>...</table> 
</template> 

и

<template name="table2"> 
    <table>...</table> 
</template> 

Я хочу, чтобы заполнить оба шаблона с одной и той же переменной, но до сих пор они разделены на два различных шаблонов.

Было бы легко создать помощника для шаблона, если бы я имел обе таблицы в том же шаблоне, как:

<template name="bothTables"> 
    <table>...</table> 
    <table>...</table> 
</template> 

Я предполагаю, что я должен создать помощника для обоих шаблонов, но есть логика переменной где-нибудь еще. Где я должен найти файл с функцией, которая создает значение переменной, которую я хочу заполнить для обоих шаблонов?

ответ

1

Вариант один:

Определяет вспомогательную функцию, которая может использоваться во всех шаблонах. http://docs.meteor.com/#/full/template_registerhelper

Пример:

1) create a file in client/lib/helpers.js

2) helper.js

Template.registerHelper('globalHelper', function(id) { 
    if(Meteor.userId() === id) 
    return "Yes"; 
    else 
    return "No"; 
}); 

3) В шаблонах:

<template name="table1"> 
    <table>{{globalHelper '123'}}</table> 
</template> 

<template name="table2"> 
    <table>{{globalHelper '123'}}</table> 
</template> 

Option два:

Если вы хотите, чтобы заполнить таблицы с одинаковым содержанием, вы можете передать контекст родительского шаблона в шаблон ребенка для получения данных, если вы хотите {{> tableContent _id }}:

<template name="table1"> 
     <table>{{> tableContent }}</table> 
    </template> 
    <template name="table2"> 
     <table>{{> tableContent }}</table> 
    </template> 

    <template name="tableContent"> 
     {{#each listOfData}} 
     <tr> 
     <td> 
      {{name}} 
     </td> 
     </tr> 
     {{/each}} 
    </template> 
    tableContent.js => 
     Template.tableContent.helpers({ 
     listOfData: function() { 
      return X.find({_id: this._id}); 
     } 
}); 

Варианта три: Зарегистрируйте помощника в обоих шаблонах.

<template name="table1"> 
     <table>{{ listOfData }}</table> 
</template> 

<template name="table1"> 
     <table>{{ listOfData }}</table> 
</template> 

table1.js=> 
    var listOfData = function(){ 
    return ExampleColleciont.find(); 
    }; 
    Template.table1.helpers({ 
    listOfData : listOfData 
    }); 
    Template.table2.helpers({ 
    listOfData : listOfData 
    }); 
+0

Спасибо. Но переменная не должна быть общедоступной. Это селектор коллекции, который почти одинаковый для обеих таблиц, поэтому я думаю, что я должен определить селектор за пределами помощников, чтобы я мог повторно использовать логику в помощниках для обоих шаблонов. – Jamgreen

+0

Хорошо зарегистрируйте помощника в обоих шаблонах в том же файле js, я обновил свой ответ. – Marztres