2016-01-30 1 views
0

Я пытаюсь получить две переменные из железы маршрутизатора так, что я могу по существу назвать их в моей temlate, такие как {{user.telephone}} и {{pic.profilepic}}. Мой код в маршрутизаторе выглядит следующим образом. (Не работает!)Meteor: Натяжение переменного из железа маршрутизатора к шаблону

Router.route('/profile/:_id', { 
name: 'profile', 
template: 'profile', 
data:function(){ 
    return { 
     user:Info.findOne({_id:this.params._id}), 
     pic: Profilepics.findOne({_id:this.params._id}) 
    }; 
    }, 
subscriptions: function(){ 
    return { 
     Meteor.subscribe("userInfo"), 
     Meteor.subscribe("profilepic"); 
}, 
action:function(){ 
    if (this.ready()){ 
     this.render(); 
    }else { 
     this.render('loading'); 
    } 
    } 

}); 

Я могу сделать только одну переменную со следующим кодом. Получите {{user.telephone}}. Любой шанс, что кто-то может помочь мне получить переменную вместо одного?

enterRouter.route('/profile/:_id', { 
name: 'profile', 
template: 'profile', 
data:function(){ 
    return { 
     user:Info.findOne({_id:this.params._id}) 
    }; 
    }, 
subscriptions: function(){ 
    return Meteor.subscribe("userInfo") 
}, 
action:function(){ 
    if (this.ready()){ 
     this.render(); 
    }else { 
     this.render('loading'); 
    } 
    } 
}); 
+0

Попробуйте возвращения несколько подписок в виде массива 'возврата [ Meteor.subscribe ("USERINFO"), Meteor.subscribe ("profilepic") ];' –

+0

Вы уверены, что обе коллекции, имеющие один и тот же '_id '? «Профиль» может иметь diff id. –

+0

да, они делают.100% уверены – user1487244

ответ

0

возвращать несколько подписок как массив из subscriptions функции,

Использование return [ Meteor.subscribe("userInfo"), Meteor.subscribe("profilepic") ];

вместо

return { Meteor.subscribe("userInfo"), Meteor.subscribe("profilepic"); который имеет {} несоответствие.

+0

Что относительно этой части, return { user: Info.findOne ({_ id: this.params._id}), pic: Профильpics.findOne ({_ id: this.params._id }) }; Я могу использовать одну переменную, (пользователь или рис.) Одновременно, но не обе вместе. Любая идея, почему это так? – user1487244

+0

Эта часть в порядке, вы можете вернуть объект в качестве контекста данных, проверить подписки, выполнив запрос в консоли браузера –

+0

да, я подтвердил подписку. Кроме того, если я просто использую return { пользователь: Info.findOne ({_ id: this.params._id}) }; он работает, также если я делаю то же самое для pics, он работает, но вместе он не работает – user1487244

0

В подобной ситуации у меня есть

data: function() { 
    var gridId = this.params._gridId; 
    return (People.find({gridId: gridId}) 
      && GridLog.find({gridId: gridId})); 
}, 

с подписавшимся звонков в waitOn() обработчик как часть булева статуса

waitOn: function() { 
    return (Meteor.subscribe('people', this.params._gridId) 
    && Meteor.subscribe('gridlog', this.params._gridId)); 
}, 

Вы можете иметь больше успеха только & & ИНГ их вместе в waitOn() (как это ни странно).

1

Если вы используете последнюю версию железного маршрутизатора, я предлагаю вам обновить код до чего-то более современного.

Сначала необходимо создать общий контроллер приложения:

ApplicationController = RouteController.extend({ 
    layoutTemplate: 'DefaultLayout', 
    loadingTemplate: 'loading_template', 
    notFoundTemplate: '404_template', 
}); 

Затем вы начинаете расширять его для различных целей:

ProfileController = ApplicationController.extend({ 
    show_single: function() { 
     this.render('profile'); 
    } 
}); 

После этого вы можете создавать свои маршруты для профильной части

Router.route('/profile/:_id', { 
    controller: 'ProfileController', 
    action: 'show_single', 
    waitOn: function() { 
     return [ 
      Meteor.subscribe("userInfo"), 
      Meteor.subscribe("profilepic") 
     ]; 
    }, 
    subscriptions: function() { 
     this.subscribe("somethingyoudontneedtowaitfor", this.params._id); 
    }, 
    data: function() { 
     if (this.ready()) { 
      return { 
       user: Info.findOne({ 
        _id: this.params._id 
       }), 
       pic: Profilepics.findOne({ 
        _id: this.params._id 
       }) 
      }; 
     } 
    } 
}); 

Это может быть немного больше кода, но он дает вам полный контроль над Это так. Кроме того, используя это, пока маршрутизатор ожидает готовности подписки, он отображает шаблон загрузки, определенный выше. Если вы не хотите отображать загрузку, вы перемещаете подписки из очереди.