2015-10-03 4 views
1

я делаю каждую петлю для массива, который я строй в качестве помощника:Используйте переменный в качестве имени для доступа к вложенным элементам другого массива

Template.article.helpers({ 
    section: function() { 
     return [ 
      {type: 'cars', sectionTitle: 'Cars'}, 
      {type: 'vegetables', sectionTitle: 'Vegetables'} 
     ]; 
    }, 
}); 

Данные для статей приходит от маршрутизатора:

Router.route('/article/:_id', { 
    name: 'article', 
    data: function() { 
     return { 
      article: Articles.findOne({ _id: this.params._id }) 
     } 
    } 
}); 

Но теперь я хочу получить доступ к подэлементу article с помощью type помощника. Поэтому в этом примере каждый цикл будет выполняться два раза: сначала я хочу использовать ../article.cars, а затем ../article.vegetable. Надеюсь, вы понимаете мою проблему. Я хочу, чтобы получить имя подэлемента по типу хелперов:

<template name="article"> 
    {{#each section}} 
     <h1>{{this.sectionTitle}}</h1> 

     <ul> 
     {{#each ../article.type}} <!-- should get '../article.cars' and '../article.vegetable' --> 
      <li>{{this.title}}</li> 
     {{/each}} 
     </ul> 
    {{/each}} 
</template> 

Я хочу использовать содержание type в качестве имени переменной. Если тип «автомобили», то я хочу использовать ../articles.cars'. Which would be something like статей ['cars'] which would result of articles [type] . But in meteor this writing is not possible. And articles.type` что-то другое.

+0

Это выглядит, как он специфичен для вашего вида двигателя. Какой движок зрения это? – Lenny

+0

@baao Я думаю, что мне нужно что-то вроде obj [name], но в meteor (см. Метки) используются точечные обозначения. Но article.type ищет тип поля. Но я хочу использовать содержимое типа как имя. – user3848987

ответ

2

Просто используйте другой помощник:

s: function(article) { 
    return article[this.type]; 
} 

И послать аргумент с ПРОБЕЛОМ:

{{#each s ../article}}