Как передать параметры с помощью помощника действия Ember.js внутри поля ввода из шаблона Handlebars?

в моем шаблоне руля у меня есть этот цикл:

{{#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}}

и необходимо передать текущий объект в качестве параметра в действие "createUser". Что-то вроде этого:--4-->

action="createUser(this)"

или:

action 'createUser' this

но кажется, что ember не может обрабатывать параметры для действий внутри поля ввода...

Я что-то пропустила?

4 ответов


Я думаю, что это невозможно сделать с помощью action собственность от input показать помощника.

обходной путь может быть обернуть ваш ввод в форму, которая использует action просмотр помощника с помощью события submit, как показано ниже:

шаблон

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

маршрут

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

поэтому, когда пользователь нажмет enter, будет инициировано событие.

основное различие между свойством action и помощником action view заключается в том, что action view helper более гибкий, и вы можете предоставить контекст и поместить его внутри любого тега:

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

по маршруту:

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

посмотреть docs дополнительная информация

пожалуйста, посмотрите в jsfiddle, чтобы увидеть этот образец в действии http://jsfiddle.net/marciojunior/UAgjX/

надеюсь, это поможет


теперь вы можете передать функцию вместе со значениями -

submit=(action 'setName' 'Sal')

http://emberjs.com/blog/2015/06/12/ember-1-13-0-released.html#toc_closure-actions


наконец-то я закончил с этим решением:

шаблон

{{input class="newUser" type="text" value=newFullName placeholder="add user"}}
<button {{action 'createUser' this newFullName}}>Send</button>

контроллер

createUser: function (fund, newFullName) {
        var fullName = newFullName;                        
        var user = this.store.createRecord('appUser', {
            fullName: fullName,                
            fund: fund,
            payments:[]
        });
        user.save().then(function(){                
            fund.get('users').pushObject(user);                
            fund.save().then(function(){
                fund.reload();
            });
        });
    }

вы можете передать параметр помощнику действия:{{action "doSomething" xxx }}

где doSomething-ваш метод контроллера, а xxx-что-либо в текущем контексте шаблона.