Ember.jsでlinkToとアクションヘルパーを組み合わせる必要があります。私のコードは:
{{#link-to 'index'}}<span {{action 'clear'}}>Clear</span>{{/link-to}}
しかし、私はこれを次のようにしたいと思います:
{{#link-to 'index' {{action 'clear'}} }}Clear{{/link-to}}
そしてまた:
<li>
{{#link-to 'support'}}
<span {{action 'myAction' 'support'}}>Support</span>
{{/link-to}}
</li>
に:
<li>
{{#link-to 'support' {{action 'myAction' 'support'}} }}Support{{/link-to}}
</li>
どうすればこれを達成できますか?
これは、SEOソリューションではOKです!
ember install ember-link-action
クロージャーアクションをinvokeAction
paramとして{{link-to}}
コンポーネントに渡すことができます:
{{#link-to 'other-route' invokeAction=(action 'testAction')}}
Link to another route
{{/link-to}}
アクションにパラメーターを渡すには、次を使用できます。
{{#link-to 'other-route' invokeAction=(action 'testAction' param1 param2)}}
Link to another route
{{/link-to}}
自動テストスイートは、アドオンが1.13から最新Ember 3リリースまで動作することを確認します。
Emberのリリース、ベータ、カナリアバージョンで動作します。
アドオンGitHubリポジトリ。 貢献は大歓迎です。
これらの組み合わせはいずれもEmber.jsで機能しませんが、これら2つのヘルパーを組み合わせる必要はありません。アクションヘルパーを使用して、コントローラーまたはルーティングにバブルさせてみませんか?そこで、コントローラでtransitionToRoute
を使用するか、ルートでtransitionTo
を使用できます。
たとえば、コントローラーでは次のようなコードを使用できます。
App.PostsController = Ember.ArrayController.extend({
clear: function () {
// implement your action here
this.transitionToRoute('index');
}
});
これは1.6.0-beta.5で正常に機能します。
<span {{action "someAction"}}>
{{#link-to "some.route"}}
Click Me
{{/link-to}}
</span>
リンクが発生し、クリックがアクションハンドラーにバブルアップします。文書化されています(間接的ではありますが) ここ 。
編集:リンクタグを開く際の構文を修正
Cereal Killerのアプローチはシンプルであるのが好きですが、残念ながら問題があります。ブラウザが別のルートに移動すると、-Ember applicationを再起動します。
Ember 2.6の時点で、次の簡単なアプローチがトリックを行います:
<span {{action 'closeNavigationMenu'}}> {{#link-to 'home' preventDefault=false}} Go Home {{/link-to}} </span>
これにより、次のことが実現します。
同じ問題を抱えて、私はこの簡単な解決策を見つけました:
{{#linkTo eng.rent class="external-button"}}<div class="internal-button" {{action "updateLangPath"}} >X</div>{{/linkTo}}
次に、スタイルシートでCSSクラスの外部ボタンと内部ボタンを管理し、「内部ボタン」が「外部ボタン」領域全体をカバーしていることを確認しました。この方法では、内部ボタンをクリックせずに外部ボタンをクリックすることはできません。
私にとってはうまくいきます。それが役立つことを願っています...
これが、O'Reilly Ember.jsブックのデモアプリケーションでこれを解決した方法です。 https://github.com/emberjsbook 。
ここで完全なソースを見ることができます: https://github.com/emberjsbook/rocknrollcall
ビューで:
{{#if artistsIsChecked}}
{{#if artists.length}}
<h3>Artists</h3>
<ul class="search-results artists">
{{#each artists}}
<li><a {{action 'viewedArtist' this.enid }}>{{name}}</a></li>
{{/each}}
</ul>
{{/if}}
{{/if}}
そしてコントローラー:
App.SearchResultsController = Em.ObjectController.extend({
actions: {
viewedArtist: function(enid) {
this.transitionToRoute('artist', enid);
},
viewedSong: function(sid) {
this.transitionToRoute('song', sid);
}
},
needs: ['artists', 'songs'],
artistsIsChecked: true,
songsIsChecked: true,
artists: [],
songs: []
});
Emberのリンク先タグは、ルートを使用して新しいビューを開くため、コントローラーアクションではなく、ターゲットルートのsetupController
メソッドのリンクの 'action'属性に入れたい機能を実行できます。
Emberガイド: http://emberjs.com/guides/routing/setting-up-a-controller/ を参照してください。
ただし、これは、特定のリンクではなく、ルートにアクセスするたびにアクションを実行する場合にのみ機能します。
controller.set('model', model);
行を、そこに入れる他のものと一緒に含めるようにしてください。