2014-09-10 4 views
0

Я пытаюсь избежать повторяющегося кода шаблона для форм, которые необходимы при создании или редактировании новых элементов.Шаблоны вложенных метеор (Blaze), управляемые родителем

Например, что-то вроде этого:

<template name="createOrEdit"> 

    <form role="form"> 

     <div class="form-group"> 
     <input type="text" class="form-control" id="title" placeholder="Title"/ value="{{title}}"> 
     </div> 

     <button type="submit" class="btn btn-default">Submit</button> 

    </form> 

</template> 

<template name="create"> 
    {{> createOrEdit}} 
</template> 

<template name="edit"> 
    {{> createOrEdit}} 
</template> 

Тогда я мог бы создал отдельные обработчик шаблона:

Template.create.events(... 
Template.edit.events(... 

Однако эти фантики родительского шаблона не будут получать события для основного ребенка шаблон.

Есть ли способ сделать то, что я хочу?

ответ

2

Эти родительские шаблоны могут получать события из дочернего шаблона. Используйте его так:

Template.create.events({ 
    'click .btn':function(){ 

    } 
}) 

Template.edit.events({ 
    'click .btn':function(){ 

    } 
}) 

В Template.createOrEdit.events объект, который вы держите события, используемые как шаблоны и Template.edit.events и Template.create.events конкретного кода для каждого.

see proof и source code

Этот подход действительно хорошо, как вы можете настроить форму, передавая некоторые переменные:

{{# create btnText="create" }}{{/create}} 
{{# edit btnText="update" }}{{/edit}} 

И в createOrEdit шаблоне вы можете использовать переменную btnText изменить метку кнопки.

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