9

私のハンドルバー テンプレートには、次のループがあります。

{{#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」アクションに渡す必要があります。このようなもの:

action="createUser(this)"

また:

action 'createUser' this

しかし、ember は入力フィールド内のアクションのパラメーターを処理できないようです...

何か不足していますか?

4

4 に答える 4

10

値とともに関数を渡すことができるようになりました -

submit=(action 'setName' 'Sal')

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

于 2015-09-18T21:19:08.897 に答える
8

ビューヘルパーのactionプロパティを使用してこれを行うことはできないと思います。input

action回避策として、次のように、送信イベントを使用してビュー ヘルパーを使用するフォームに入力をラップすることができます。

テンプレート

{{#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 キーを押すと、イベントがトリガーされます。

アクション プロパティとアクション ビュー ヘルパーの主な違いは、アクション ビュー ヘルパーの方が柔軟性が高く、コンテキストを指定して任意のタグ内に配置できることです。

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

ルート内:

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

詳細については、ドキュメントを参照してください

jsfiddle を見て、実際のサンプルを確認してくださいhttp://jsfiddle.net/marciojunior/UAgjX/

役立つことを願っています

于 2013-09-12T17:29:10.517 に答える
2

最後に、私はこの解決策に行き着きました:

テンプレート

{{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();
            });
        });
    }
于 2013-09-19T11:03:31.727 に答える