私は別の解決策使用して終了:これらのルートのサポート
this.resource('video', function() {
this.route('index', {path: '/'});
this.route('item', {path: ':id'});
});
を:
/video
は -
/video/123
私のデフォルト/フィクスチャのモデルを示している - ショーモデル123
へのユーザーアクセスでは、VideoIndexRouteはIDなしでVideoItemRouteにリダイレクトする必要があります。今
var VideoIndexRoute = Em.Route.extend({
afterModel: function() {
// this is the tricky part
this.replaceWith('video.item', '');
}
});
関連するすべてのモデルが存在する場合、VideoItemRouteは確認する必要があり、それが欠けているとき、それはデフォルトの備品や新しいものを使用する必要があります。あなたは `renderTemplate`でレンダリングするテンプレートspecifiyingのように、彼はそれがこのように動作させるために行う必要があるでしょう多くのものを残し、そしてvideoModelとビデオコントローラなどの間の重複を処理している
var VideoItemRoute = Em.Route.extend({
model: function(param) {
if (param.id) {
return this.store.find('video', param.id);
}
},
setupController: function (controller, model) {
if (!model) {
model = this.store.createRecord('video',{
name: 'default Name'
});
// or use fixture...
}
this._super(controller, model);
}
});
私はこれを少し厄介であると言います理由は、ルートを変更すると古いルートテンプレートが壊れてしまいますが、コントローラをクリアしないというニュアンスです。悪用されることは確実ではない。 –
これを行うには、ビデオ/インデックスルートを使用し、ビデオ/インデックステンプレートに '{{render 'video.choice' defaultVideo}}'を実行する別の方法があります。その後、通常どおりVideoChoiceRouteをレンダリングすることができます。これは、実際にはより良い&少ない "トリッキー"かもしれません。 –
偉大な、これは完全に動作します – kabal