更新: Ember 1.8.1+ については、以下の Michael Lang のコメントを参照してください。
Myslik の回答 (まったく使用せずlink-to
、代わりにaction
and thenを使用transitionToRoute
) の問題は、SEO には役に立たず、検索エンジンのボットには何も表示されないことです。
リンクが指しているものをインデックスに登録したい場合は、古き良きもの<a href=x>
をそこに置くのが最も簡単です。link-to
リンク URL がルート URL と同期されるように使用することをお勧めします。私が使用するソリューションは、作業を行うためのアクションとlink-to
、ページをインデックス化するための便利な機能の両方を提供します。
のいくつかの機能をオーバーライドしますEmber.LinkView
:
Ember.LinkView.reopen({
action: null,
_invoke: function(event){
var action = this.get('action');
if(action) {
// There was an action specified (in handlebars) so take custom action
event.preventDefault(); // prevent the browser from following the link as normal
if (this.bubbles === false) { event.stopPropagation(); }
// trigger the action on the controller
this.get('controller').send(action, this.get('actionParam'));
return false;
}
// no action to take, handle the link-to normally
return this._super(event);
}
});
次に、実行するアクションと、Handlebars でアクションを渡す対象を指定できます。
<span {{action 'view' this}}>
{{#link-to 'post' action='view' actionParam=this}}
Post Title: {{title}}
{{/link-to}}
</span>
コントローラーで:
App.PostsIndexController = Ember.ArrayController.extend({
actions: {
view: function(post){
this.transitionToRoute('post', post);
}
}
}
このようにして、レンダリングされたページのコピーをキャッシュし、それをインデックス作成ボットに提供すると、ボットは URL を含む実際のリンクを見て、それに従います。
transitionTo
(また、現在は推奨されていないことにも注意してくださいtransitionToRoute
)