call method in Iron-Router RouteController from Template.tmpl.helpers() not working

会有一股神秘感。 提交于 2019-12-11 20:01:54

问题


I'm trying to push new data on to my clients array each time the loadMoreClients method is called. The publication is expecting this back_to parameter and knows how to handle it. My problem is that I can't seem to call these methods from my Template helpers .

I logged Iron and Iron.controller to the console and both of those exist and are showing me what I expected to see. I just can't seem to find current docs or examples of how to access Iron.controller() methods/properties from my Template helpers

Here is my RouteController code:

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))
})

Here is my helpers code:

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()
}
})

I'm getting undefined function errors on my Iron.controller() calls to loadMoreClients and loadAllClients methods.

What am I doing wrong here?


回答1:


I have changed the approach to this problem by simply updating the subscription to subscribe to posts earlier than the currently loaded date.

It is working, although seems like there should be a better way than having to waitOn the subscription when I want to load more.



来源:https://stackoverflow.com/questions/27162146/call-method-in-iron-router-routecontroller-from-template-tmpl-helpers-not-work

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!