2014-11-27 2 views
0

Я пытаюсь вывести новые данные в мой массив clients каждый раз, когда вызывается метод loadMoreClients. Публикация ожидает этот параметр back_to и знает, как с ним справиться. Моя проблема в том, что я не могу назвать эти методы из моих помощников Шаблонов.метод вызова в Iron-Router RouteController из Template.tmpl.helpers() не работает

Я записал Iron и Iron.controller на консоль, и оба они существуют и показывают мне то, что я ожидал увидеть. Я просто не могу найти текущие документы или примеры того, как получить доступ к Iron.controller() методы/свойства из моих шаблонов хелперов

Вот мой RouteController код:

ClientController = ApplicationController.extend({ 
action : function(){ 
    this.render(Router.current().route.getName()) 
}, 

data : function(){ 
    if(this.params._id){ 
     return Clients.findOne({ _id:this.params._id }) 
    } 
}, 

waitOn : function(){ 
    return [ 
     Meteor.subscribe('directory'), 
     Meteor.subscribe('clients') 
    ] 
}, 

loadMoreClients : function(){ 
    this.months_back += 3 
    this.back_to = moment().subtract(this.months_back,'months').startOf('day') 
    this.clients.push(Meteor.subscribe('clients', {back_to:this.back_to, skip:this.clients.length})) 
}, 

loadAllClients : function(){ 
    this.clients.push(Meteor.subscribe('clients', {back_to:this.start_of_time, skip:this.clients.length})) 
}, 

// we'll use these properties to 'load more' client data 
clients : [], 
back_to : moment().subtract(3,'months').startOf('day'), 
months_back : 3, 
start_of_time : moment(new Date(0)) 
}) 

Вот мой хелперы код:

Template.client_list.helpers({ 
clients : function(){ 
    var clients = [] 
    Iron.controller().clients.forEach(function(client){ 
     // ... some stuff here... 
     clients.push(client) 
    }) 

    return clients 
}, 

earliestClientLoaded : function(){ 
    var controller = Iron.controller() 
    return controller.clients[controller.clients.length - 1].createdAt 
} 
}) 

Template.client_list.events({ 
'click .btn-load-more' : function(e){ 
    e.preventDefault() 

    Iron.controller().loadMoreClients() 
}, 

'click .btn-load-all' : function(e){ 
    e.preventDefault() 

    Iron.controller().loadAllClients() 
} 
}) 

Я получаю undefined function ошибки на моих Iron.controller() звонки на loadMoreClients и loadAllClients методы.

Что я здесь делаю неправильно?

ответ

0

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

Он работает, хотя кажется, что должен быть лучший способ, чем иметь waitOn подписку, когда я хочу загрузить больше.

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