私はこのような単純なtemplate.hbs
ありますEmberルートモデルの一部のみを約束する方法は?
// template.hbs
<p>{{model.x}}</p>
<p>{{model.y}}</p>
次route.jsは期待通りに動作します:
// route.js
import Route from '@ember/routing/route';
export default Route.extend({
model() {
return {
x: 'foo',
y: 'bar'
};
}
});
// output, immediately:
// foo
// bar
以下は、今もモデル全体のための約束を使用して、作品
:
を// route.js
import Route from '@ember/routing/route';
import RSVP from 'rsvp';
export default Route.extend({
model() {
return new RSVP.Promise((resolve) => {
setTimeout(() => {
resolve({
x: 'foo',
y: 'bar'
});
}, 1000);
});
}
});
// output, after 1s:
// foo
// bar
私はただmodel.x
を約束したいと思っていますが、以下は動作しません。
// route.js
import Route from '@ember/routing/route';
import RSVP from 'rsvp';
export default Route.extend({
model() {
return {
x: new RSVP.Promise((resolve) => {
setTimeout(() => {
resolve('foo');
}, 1000);
}),
y: 'bar'
};
}
});
// output, IMMEDIATELY:
// [object Object]
// bar
それはすぐに出力をレンダリングするが、それはsetTimeout
にコールバックに入った後、それはmodel.x
のためにレンダリングされた値を変更しません。
私はRSVP.hash()
を認識していますが、約束が拒否された場合は拒否されます。ルートモデルのさまざまな部分に対して独立した約束をすることは可能ですか、それともすべてかどうかだけですか?
奇妙なことに、問題の約束がember-dataによって返されるとします。 x: this.get('store').findRecord('user')
の場合、動作するはずです(template.hbs
を<p>{{model.x.name}}</p>
と変更)。最後のケースでは
ブルズアイ!ありがとう、@エノ! –