2015-03-14 2 views
1

У меня есть две коллекции: коллекция A, которая включает в себя массив идентификаторов B.Meteor get ID шаблона родителя

Шаблон A:

<template name="templateA"> 
    Name : {{name}} - {{_id}} 
    {{#each allBsOfThisA}} 
     {{> Bdetail}} 
    {{/each}} 
    <a href="{{pathFor 'Bsubmit'}}">Add B for this A</a> 
</template> 

Примечание: в этом templateA, я перечисляю все А и их подробно информацию. В нижней части А, я гнал ссылку, чтобы добавить B.

Шаблон Bsubmit:

<div class="form-group {{errorClass 'nameOfB'}}"> 
    <label class="control-label" for="nameOfB">nameOfB</label> 
    <div class="controls"> 
     <input name="nameOfB" id="nameOfB" type="text" value="" placeholder="nameOfB" class="form-control"/> 
     <span class="help-block">{{errorMessage 'nameOfB'}}</span> 
    </div> 
</div> 

<input type="submit" value="Submit" class="btn btn-primary"/> 

На скрипте Bsubmit: Я хочу получите идентификатор A. Я пробовал с template.data._id, но он не работает:

Template.Bsubmit.events({'submit form': function(e, template) { 
    e.preventDefault(); 
    console.log("template.data._id: " + template.data._id); 
     var B = { 
     name: $(e.target).find('[name=name]').val(), 
     AId : template.data._id 
     }; 
    } 
}); 

EDIT:

железо-маршрутизатор часть BSubmit в:

Router.route('Bsubmit ', {name: 'Bsubmit '}); 
+0

Template.parentData() ._ id –

+0

Как установить контекст данных для 'dealSubmit'? –

+0

Не работает для Template.parentData() ._ id: Uncaught TypeError: Невозможно прочитать свойство '_id' от null. – ChrisD

ответ

1

Ни шаблон, ни маршрут знает о A-экземпляром другого шаблона/маршрута ,

Так одно решение было бы передать идентификатор на маршрут, который позволяет получать экземпляр или использовать идентификатор непосредственно:

Шаблон:

<template name="templateA"> 
    Name : {{name}} - {{_id}} 
    {{#each allBsOfThisA}} 
     {{> Bdetail}} 
    {{/each}} 
    <a href="{{pathFor 'Bsubmit' _id=_id}}">Add B for this A</a> 
</template> 

Маршрут:

More information about passing arguments to a route

Router.route('/Bsubmit/:_id', function() { 
    var a = A.findOne({_id: this.params._id}); 
    this.render('Bsubmit', {data: a}); 
}); 

Тогда вы можете использовать template.data._id в мероприятие.

Другим решением было бы вставить форму в другой вид, чтобы вы могли получить доступ к данным родительского шаблона там (documentation of parentData).

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