2014-11-19 1 views
1

Почему он не работает, когда выполняется внутри маршрутизатора? Он всегда возвращает undefined.Правильный способ .findOne() в Iron: router

Однако .find() работает без проблем. Также проверено .findOne(), вручную введя условие и ._id вручную.

Is .findOne() не предназначен для работы внутри маршрутизатора?

+0

Я не вижу причин, почему он не должен. Можете ли вы показать код? Это может быть связано со старой проблемой «данные еще не получены». –

ответ

1

Он работает правильно в моем приложении. Я реализовал это следующим образом:

Router.map(function() { 
    this.route('training', { 
     path: '/training/:id', 
     data: function() { 
      return Trainings.findOne({id: this.params.id}); 
     }, 
     notFoundTemplate: 'notFound', 
     title: "Training" 
    }); 
}); 
+0

Я понимаю, что это работает, но что, если я хочу увидеть результат базы данных от самого маршрутизатора? если я попытаюсь увидеть результаты findOne внутри действия: function() {} По какой-то причине он вернется не определен. Но если я делаю .find() и пытаюсь увидеть эти данные, он работает. Почему это? – saeho

0

все нормально работает! Возможно, вы пытаетесь передать результат итератору? это не курсор. попробуйте найти(). Fetch() и используйте результат таким же образом.

Если это проблема с данными/сроками, вы также можете охранять с помощью функции ready(). вам не нужно, если вы используете его реактивно, но это дает вам немного более явное знание, когда все происходит, но без использования waitOn.

в CoffeeScript:

#---------routes --------- 
    @route 'routeName', 
    path: '/path/to/:cname' 
    onBeforeAction: -> 
     Meteor.subscribe('Things', { 
     cname: @params.cname 
     }) 
     this.next() 

    data: -> 
     if @ready() 
     data = { 
      params: @params 
     } 
     data.lesson = Things.findOne({cname: @params.cname}) 
     return data