我是ember.js的新手。
我有以下代码需要更改以使用多个模型从服务器检索数据(使用多个JSON / RESTful调用)。
这个(单一模型版本)工作:
在app / routes / index.js中:
import Ember from 'ember'; export default Ember.Route.extend({ model() { return this.get('store').queryRecord('wallet', {balance: true}); } });
并在wallet-balance.hbs中:
<div>Your Total Score: {{wallet.balance}} </div>
我改为这个并且工作原理:
import Ember from 'ember'; import RSVP from 'rsvp'; export default Ember.Route.extend({ model() { return RSVP.hash({ wallet: this.get('store').queryRecord('wallet', {balance: true}) }); } });
并在wallet-balance.hbs中:
<div>Your Total Score: {{wallet.wallet.balance}} </div>
但是,如果我改为以下(&#34;钱包&#34; - &gt;&#34; anythingelse&#34;),它就会工作:
import Ember from 'ember'; import RSVP from 'rsvp'; export default Ember.Route.extend({ model() { return RSVP.hash({ anythingelse: this.get('store').queryRecord('wallet', {balance: true}) }); } });
并在wallet-balance.hbs中:
<div>Your Total Score: {{anythingelse.wallet.balance}} </div>
我试图了解原因。它取决于定义&#34;钱包&#34; - 以及为什么改为&#34; anythingelse&#34;不上班?其他地方的代码是&#34;钱包&#34;指的是?
答案 0 :(得分:2)
组件与周围环境隔离,因此必须传递组件所需的任何数据。因此您需要了解how to pass properties to component。
我假设,在上述三个示例中,您都包含wallet-balance
这样的组件。
{{wallet-balance wallet=model}}
如果你想让{{anythingelse.wallet.balance}}
这个用于第三个例子,那么你需要包含像{{wallet-balance wallet=model.anythingelse}}
这样的组件
要在模板hbs文件中进行调试,您可以使用log
helper,例如{{log 'model object' model}}
这将在控制台中打印model
对象。
这是屏幕背后的原因,
默认情况下,通过model
挂钩方法,将从相应控制器的setupController
属性中设置从模型挂钩返回的内容。
在您的情况下,您没有覆盖setupController
,因此默认行为适用。
return this.get('store').queryRecord('wallet', {balance: true});
Promise
,它将被解析为单个记录wallet
,并将在控制器的model
属性中设置。现在model
相当于单个wallet
记录对象。你可以在模板`{{model.balance}}
return RSVP.hash({ anythingelse: this.get('store').queryRecord('wallet', {balance: true}) });
queryRecord
将返回Promise
,它将被解析为单个记录wallet
,它将在对象{anythingelse:walletRecord}
内设置,现在模型相当于{{1} }}。您可以在{anythingelse:walletRecord}
答案 1 :(得分:0)
您需要在setupController()
中设置模型。
import Ember from 'ember';
import RSVP from 'rsvp';
export default Ember.Route.extend({
model() {
return this.get('store').queryRecord('wallet', {balance: true});
},
setupController(controller, wallet) {
controller.set('wallet', wallet);
}
});
希望这有帮助。