2016-12-08 5 views
0

Использование IronRouter от Meteor, как мне добавить уникальный идентификатор коллекции и создать страницу на основе указанного идентификатора? Кроме того, на странице, как я могу получить информацию из этой коллекции и отобразить ее?Метеор, прикрепляющий уникальную страницу с коллекцией с IronRouter

В коллекции я попытался собрать идентификатор представления, но я не понимаю, как получить данные из коллекции на уникальной странице.

До сих пор, для коллекции, у меня есть:

import { Meteor } from 'meteor/meteor'; 
import { Template } from 'meteor/templating'; 
import { Works } from '../api/works.js'; 

import './work.js'; 
import './body.html'; 

Template.main.helpers({ 
    works() { 
    return Works.find({}, { sort: { createdAt: -1 } }); 
    }, 
}); 

Template.main.events({ 
    'submit .new-work'(event) { 
    event.preventDefault(); 

    const title = event.target.title.value; 
    const workBriefDesc = event.target.workBriefDesc.value; 
    const workFullDesc = event.target.workFullDesc.value; 
    const workId = this._id; 

    Works.insert({ 
     title, 
     workBriefDesc, 
     workFullDesc, 
     createdAt: new Date(), 
     owner: Meteor.userId(), 
     username: Meteor.user().username, 
     workId, 
    }); 

    event.target.title.value = ''; 
    event.target.workbriefdesc.value = ''; 
    event.target.workfulldesc.value = ''; 

    }, 
}); 

И для файла IronRouter:

Router.route('/works/:_id', function() { 
    this.render('Collab'); 
}, { 
    name: 'collab', 
    data: function(){ 
     var workId = this.params._id; 
     return Works.findOne({ _id: workId }); 
    } 
}); 

, и файл шаблона:

<!-- Publishing the template work --> 
<template name="main"> 
         <form class="new-work col s12"> 
          <div class="row"> 
           <div class="input-field col s6"> 
            <input id="title" type="text" class="validate"> 
            <label for="title">Name of work</label> 
           </div> 
           <div class="input-field col s6"> 
            <select> 
             <option value="" selected>Choose category</option> 
             <option value="1">Prose</option> 
            </select> 
            <label></label> 
           </div> 
          </div> 
          <div class="row"> 
           <div class="input-field col s12"> 
            <input id="workBriefDesc" type="text" length="250"> 
            <label for="workBriefDesc">Brief description</label> 
           </div> 
          </div> 
          <div class="row"> 
           <div class="input-field col s12"> 
            <textarea id="workFullDesc" class="materialize-textarea" length="10000"></textarea> 
            <label for="workFullDesc">Full description</label> 
           </div> 
          </div> 
          <div class="row"> 
           <div class="input-field col s12"> 
            <textarea id="workessay" class="materialize-textarea"></textarea> 
            <label for="workessay">Essay</label> 
           </div> 
          </div> 
          <div class="modal-footer"> 
           <button href="#!" class="modal-action modal-close waves-effect waves-grey btn-flat center" type="submit" name="action">Submit</button> 
          </div> 
         </form> 
    {{#each works}} {{ > work}} {{/each}} 
</template> 

<!-- Link to the unique page --> 
<template name="work"> 
    Go to <a href="/work/{{_id}}">work</a> 
</template> 


<!-- Unique page attached to ID --> 
<template name="collab"> 
    {{title}} <br> 
    {{workBriefDesc}} <br> 
    {{workFullDesc}} 
</template> 

ответ

0

Вы должны изменить ваш помощник:

Template.main.helpers({ 
    works: function(){ 
    return Works.findOne({_id:Router.current().params.workId}); 
    }, 
}); 
+0

К сожалению, это прерывает цикл foreach в основном шаблоне. Кроме того, я попытался поместить его в раздел функций данных IronRouter для тестирования, но он ничего не делает. – DarkTakua

0

Помощник: Я думаю, вы должны поставить одно условие на свой «рабочий» помощник.

ВАШ КОД

Template.main.helpers({ 
    works() { 
    return Works.find({}, { sort: { createdAt: -1 } }); 
    }, 
}); 

В коде выше, измените оператор возврата и попробовать.

UPDATE

return Works.findOne({_id:Router.current().params._Id}); 

Надежда эта работа!

+0

Как и в случае с другим решением, он разбивает цикл в основном шаблоне. – DarkTakua

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