Q: Pass named function to an events map I have a Meteor template that includes the following:
{{#with selected_recipe}}
  {{>recipe}}
{{/with}}

In my code (Coffeescript), I want to call a function by name from my event map (Backbone-style):
Template.recipe.events = {
  'click #btn-edit-recipe': 'editRecipe'
}

editRecipe = (event) ->
  console.log @  #should log the selected_recipe object
  #edit recipe

However, this fails. When I click on my button in the recipe template, I get Uncaught TypeError: Object editRecipe has no method 'call' (liveui.js:651) I learned event maps from Backbone, and maybe Meteor is different. I can get it to work with:
Template.recipe.events = {
  'click #btn-edit-recipe': -> editRecipe.call(@, event)
}

Is this the right way to do this? Or am I making some simple error? I've always liked using event maps this way because it summarizes the behaviors of the rendered template in just a few lines. Anonymous functions can spread the list out, making it harder to read, and of course they are not reusable.

A: What you are doing (later one, where event definition points to a function) is right.
Event map with value as function name (string) is pattern specific to backbone. Meteor doesn't support it. 

I've always liked using event maps this way because it summarizes the
  behaviors of the rendered template in just a few lines.

But you can acheive similar functionality by doing something like this:
Template.recipe.doLogin = function(){};
Template.recipe.requestData = function(){};

//  OR Another way
_.extend(Template.recipe, {
    "openFile":function(){},
    "editRecipe":function(){} 
});

//  now Events
Template.recipe.events {
    'click #btn-edit-recipe': Template.recipe['editRecipe'],
    'click #btn-create-recipe': Template.recipe['createRecipe']
}

Personally, I don't like event-maps. cause its a mapping, which developer has to maintain manually. 
Edit: Working code @ https://gist.github.com/3010818
