Ember.Route.model
params
変数へのアクセスを持っていますが、Ember.Route.setupController
ません。私のパスには複数のダイナミックセグメントがあり、テンプレート内のすべてを使用する必要があるため、これは私にとって面倒です。 /project/:project_id/task/:task_id
:Ember.Route内からパラメータにアクセスする適切な方法は何ですか。 setupController?
具体的には、私のパスは次のようになります。タスクは、1つではなく、多くのプロジェクトに属することができます。したがって、私たちが見ているプロジェクトは、タスク自体を見るだけではわかりません。URLにあるプロジェクトIDを使用する必要があります。ここで私は現在、それをやっている方法は次のとおりです。
App.TaskRoute = Ember.Route.extend({
// This works just fine:
serialize: function(model) {
return {
task_id: model.get('id'),
project_id: this.modelFor('project').get('id')
};
},
model: function(params) {
this.set('parentProjectId', params.project_id);
return App.Task.find(params.task_id);
},
setupController: function(controller, model) {
var parentProject = this.modelFor('project') ?
this.modelFor('project') :
App.Project.find(this.get('parentProjectId'));
controller.set('parentProject', parentProject);
controller.set('content', model);
}
});
は、たぶん私は偏執的であることだ、これはただのハック感じています。ルートがパラメータにアクセスすることを目的としていた場合は、すでにparams
プロパティがアタッチされています。より良い方法がありますか?
編集:私は上記のコードをいくつか更新しました。また、私のルートは次のようになります:
App.Router.map(function() {
this.resource('project', { path: '/project/:project_id' });
this.resource('task', { path: 'project/:project_id/task/:task_id' });
});
ああ、私は、モデル法は、最初のロード時に呼び出されることを認識していませんでしたが、それは私が見てきたquirkinessの多くを説明しています。たとえば、 'model'が呼び出されていないので、/ project/1/tasks/2を直接開くと、上のコードは機能しません。したがって、' parentProjectId'属性は設定されません。その場合は、 'setupController'の中で' var parentProject = this.modelFor( 'project') 'を実行する必要があります。 私は別のProjectRouteを持っています。/project/1を開くと、プロジェクトのタスクが表示されます。タスクをクリックすると、/ project/1/tasks/1が開きます。タスクビューにはプロジェクトに戻るリンクが必要なので、URLからプロジェクトを取得しています。 – NudeCanalTroll
それでは今は動作しますか?私の考えはthis.modelFor( "project")も使用することでした。/project/1/tasks/2経由でアプリケーションを入力するときは、まずProjectRouteをヒットし、モデルフックを押す必要があります。その後、modelForを使用してアクセスできます。 ember-dataを使用してデータをモデル化するときに、コントローラのparentProjectを設定するのはちょっと冗長な感じです。 TaskModelにそのプロパティが存在してはいけませんか? – mavilein
タスクは複数のプロジェクトに属することができます(タグのようなプロジェクトを考える)、「プロジェクトに所属しています」という関連付けをするのではなく、「多くのプロジェクトを持っています」という関連付けです。したがって、タスクを見るだけで、私が入っているプロジェクト(つまり、戻るボタンをリンクする場所)を知ることができません。私はURLを確認する必要があります。とにかく、私はモデルを試してみよう。私は自分のルートが正しく設定されていないと思うので、/ project/1/task/2に行くと、まずTaskRouteがヒットします。プロジェクトルート内に自分のタスクルートを入れ子にする必要があると思いますか?自分のルートがどのように見えるかを表示するために質問を更新します。 – NudeCanalTroll