2014-12-18 1 views
1

Я пытаюсь создать страницу редактора product в своем приложении. Данные продукта полностью переменный, однако он структурирован следующим образом:Переключение шаблона на основе значения в Iron Router

{ 
    "_id" : "543e759ff08da702009542d2", 
    "fields" : [ 
     { 
      "binding" : "title", 
      "type" : "text", 
      "_id" : "543e759ff08da702009542d8", 
      "data" : "A TEST Product Title" 
     }, 
     { 
      "binding" : "description", 
      "type" : "multiLineText", 
      "_id" : "543e759ff08da702009542d7", 
      "data" : "Oooo... Simply delicious text that describes the product in detail" 
     }, 
     { 
      "binding" : "price", 
      "type" : "currency", 
      "_id" : "543e759ff08da702009542d6", 
      "data" : "£2.25" 
     }, 
     { 
      "binding" : "image", 
      "type" : "image", 
      "_id" : "543e759ff08da702009542d5", 
      "data" : "http://www.google.com/image.png" 
     } 
    ] 
} 

До сих пор на странице у меня есть {{#each fields}} блока внутри формы.

Что бы я хотел сделать, так это иметь отдельные шаблоны «textEditor», «currencyEditor» и т. Д. Для каждого типа поля, которые могут потребоваться отредактировать, сохраняя при этом всю логику красиво разделенной.

Как лучше всего внедрить соответствующий шаблон в представление?

очень грубым способом было бы что-то вроде:

{{#each fields}} 
    {{#if typeIs 'text'}} 
    {{>textEditor}} 
    {{/if}} 
    {{#if typeIs 'currency'}} 
    {{>currencyEditor}} 
    {{/if}} 
{{/each}} 

ответ

5

Использование Template.dynamic:

<template name="main"> 
    {{#each fields}} 
     {{> Template.dynamic template=getTemplateName}} 
    {{/each}} 
</template> 
Template.main.helpers({ 
    getTemplateName: function(){ 
     return this.type+"Editor" 
    } 
}) 

Что касается вашего нового вопроса от комментария: предлагаемое решение ниже не достаточно хорошо? Вам нужно одно событие сохранения?

<template name="textEditor"> 
    <form> 
     <input type="text" value="{{data}}"> 
    </form> 
</template> 
Template.textEditor.events({ 
    'submit form': function(){ 
     event.preventDefault() 
     // Save text type. 
    } 
}) 
<template name="multiLineTextEditor"> 
    <form> 
     <textarea>{{data}}</textarea> 
    </form> 
</template> 
Template.textEditor.events({ 
    'submit form': function(){ 
     event.preventDefault() 
     // Save multi line text type. 
    } 
}) 
+0

Woah. Я даже не знал, что ты можешь это сделать. Получите мой взнос и мою благодарность! –

+0

Извините, что продлеваю мой вопрос Пеппе, но если я сделаю это так, как вы описали, как, черт возьми, я должен подключить кнопку «Сохранить» в конце формы? Только каждый шаблон «редактора» знает, как лучше всего сохранить свои собственные данные, но я хочу, чтобы сохранение было сделано в одном обновлении, когда пользователь нажимает на сохранение ... Любые идеи? – Siyfion

+0

@Siyfion, решение в моем обновленном ответе не достаточно хорошо? –

Смежные вопросы