スマートフォンアプリを構築しようとしていますが、サーバーパラメータでネストされたルートを呼び出すことに悩まされています。ユーザーがログインしている親ルートのテンプレートの下に、私が家計を表示するための子ページをレンダリングしたいという情報を表示したい。特定の世帯が選択された後、私は家庭内の部屋を表示し、次にデバイスを表示します。これは私のrouter.jsember 2.17でいくつかのパラメータでネストされたルートを使用する方法
Router.map(function() {
this.route('about');
this.route('users', function() {
});
this.route('households', { path: '/:user_id' }, function() {
this.route('index', { path: '/:user_id' })
this.route('rooms',{ path: '/:household_id' });
this.route('devices', { path: '/:room_id' });
});
});
export default Router;
私はこの
<h3>{{#link-to "households" user.id}}{{user.surname}}{{/link-to}}</h3>
、今私は燃えさしデータストアからユーザーを返すhouseholds.jsのルートでモデルを宣言したいような世帯へのリンクです親テンプレートをレンダリングします。その後、モデルはuser.idを使ってhouseholds.indexにリダイレクトする必要があり、households.index.hbsはすべての世帯を親テンプレートの下にレンダリングする必要があります。
export default Route.extend({
model(params){
{
return this.get('store').findRecord('user', params.user_id);
}
}
});
この
export default Route.extend({
model(params) {
return this.get('store').findAll('household').then(results => results.filter((site) => {
return site.get('member').filter(x => x == params.user_id).length > 0;
}));
}
});
のように私のhousehold.indexルートは実際に次のエラーが発生します: マイhouseholds.jsルートは次のようになり、一般的に
Error: Assertion Failed: You attempted to define a
{{link-to "households.rooms"}}
but did not pass the parameters required for generating its dynamic segments. You must provide paramuser_id
togenerate
.
私はのserveralを必要としますすべてのネストされたルート/サブルートのパラメータを使用する必要があります。たとえば、呼び出し側のユーザが管理者かどうかを確認するためにルートデバイスにuser_idが必要です。彼が管理者であれば、デバイスを追加したり編集したりすることができます。そして、選択した部屋にあるデバイスだけを表示するにはroom_idが必要です。
サーバパラメータを渡す方法やコントローラを使用する方法はありますか?私の目的は何ですか?
ありがとうございます。あなたの例を構築しようとしましたが、ユーザーIDが定義されていないため、単一のユーザーの世帯へのリンクが機能していません。私の開始ページには、http:// localhost:4200/users/indexというURLがあり、あなたが "{{#link-to 'users.single.households' user.id}}}のように実装されたリンクをクリックすると、 http:// localhost:4200/users/131000/households/indexにリダイレクトされ、渡されたuser_idはモデルフックでは未定義です。私はこれをどのように修正できるか考えていますか? – panx36
これは大丈夫ですが、あなたが言ったようにlocalhost:4200/users/131000/householdsにリダイレクトされますが、まだ未定義のパラメータがあります。どうすれば131000にアクセスできますか? – panx36
任意のルートの 'model(params)'フック内の 'params 'にすべてアクセスできます。つまり、ユーザの子ルートで 'params.user_id'にアクセスすることができ、そこからあなたのモデルにアクセスできるようにすることができます。したがって 'localhost:4200/users/131000/households'のルートにアクセスすると' model() 'フックは' user_id'を含む 'params'を受け取ります。 –