Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to pass parameters with the action Helper of Ember.js inside an input field from an Handlebars template?

In my handlebars template I have this loop:

{{#each itemController="fund"}}
    <li>                        
        <label>{{title}}</label>            
        <span>{{amount}}</span>
        {{input type="text" placeholder="new user"
        value=newFullName action="createUser"}}
        {{partial 'user-list'}}
    </li>
{{/each}}

and need to pass the current object as parameter to the 'createUser' action. Something like this:

action="createUser(this)"

or:

action 'createUser' this

But it seems that ember can't handle parameters for actions inside an input field...

Am i missing something?

like image 909
Massimo Guidi Avatar asked Sep 12 '13 11:09

Massimo Guidi


1 Answers

I think that isn't possible to do this using the action property from input view helper.

A workaround could be wrap your input in a form that use the action view helper using the submit event, like the following:

Template

{{#each}}
      <li>                   
          <form {{action "createUser" this on="submit"}}>
              {{name}}
              {{input type="text" value=name}}          
          </form>
      </li>
  {{/each}}

Route

  ...
  actions: {
    createUser: function(user) {
      alert(user.get('name'));
    }
  }
  ...

So when the user hit enter, will have the event triggered.

The main difference between the action property and the action view helper is that the action view helper is more flexible and you can supply the context and put it inside of any tag:

<div {{action "someAction" someObject}} on="click">Click me</div>

In the route:

actions: {
  someAction: function(someObject) {
    // do something with the someObject
  }
}

See the docs for further information

Please give a look in the jsfiddle to see that sample in action http://jsfiddle.net/marciojunior/UAgjX/

I hope it helps

like image 162
Marcio Junior Avatar answered Oct 19 '22 05:10

Marcio Junior