我正在尝试根据先前模型请求的结果从商店发出模型请求。请找到以下代码:
路线:
model(params) {
var id = params.framework_id;
var main = this;
return Ember.RSVP.hash({
question: this.store.query('question', {orderBy: 'framework', equalTo: id}),
framework: this.store.find('frameworks', id),
frameworks: this.store.findAll('frameworks')
})
}
然后在路线中有一个setupController:
setupController: function(controller, model) {
this._super(controller, model);
var main = this;
...
controller.set("frameworkName", model.framework.get('name'));
var includedFramework = model.framework.get('includedFramework');
var includedFrameworkModel = this.store.find('frameworks', includedFramework);
Ember.Logger.info(model.framework)
Ember.Logger.info(includedFrameworkModel);
if (model.framework.get('includedFramework') != undefined) {
var linked = main.store.find("frameworks", model.framework.get('includedFramework'));
controller.set("linkedFramework", {id: linked.get('id'), name: linked.get('name')});
}
}
在控制器设置中,使用model.framework.get('name')
可以正常工作。 mode.framework.get('includedFramework')
工作正常,并将ID返回到存储在框架模型中的另一个框架。然后我打算拉出包含框架"在另一个store.find
请求的商店中。不幸的是,第二个store.find
没有以与第一个相同的方式返回模型记录。以下是每个请求返回内容的检查器视图:
model.framework -
includedFrameworkModel -
非常感谢任何帮助!
答案 0 :(得分:0)
好吧,每次调用ember-data都会返回可能需要向服务器发送请求的内容,例如find()
,findAll()
,query()
,save()
和async关系返回PromiseObject
或PromiseArray
。
对于对象和数组,它的工作方式相同,所以让我们描述一下数组是如何工作的。
PromiseArray
是Promise
和ArrayProxy
。
这非常有用,因为您可以根据自己的情况以两种方式使用它。
由于对服务器的请求可能需要一些时间,因此生成的ArrayProxy
部分通常为空,稍后将填充数据。这非常有用,因为当ArrayProxy
更改时,您的把手模板和计算属性会更新。
PromiseArray
的Promise部分将在服务器收到数据后立即解析,并带有实际数组,以后在您对数据进行进一步更改时也可能会更新。
然而,在加载路由之前,ember路由器将等待承诺得到解决,这允许您指定loading
基板。
这就是model.framework
中setupController
不同的原因。它不是.find()
的结果,而是已解决的承诺的结果。这基本上是Ember.RSVP.hash
为你做的。
一般来说,我建议你做两件事。
.setupController()
挂钩中完成所有请求,并使用promise链理。也许以此为灵感:
.model()
答案 1 :(得分:0)
$("#emlpyeetd").after('<s:textfield id="employeeVal" name="employeeView.policyOrQuoteNumber" maxlength="15" style="width: 200px;" class="hideForAnotherField" theme="simple"></s:textfield>');
<td width="25%">
employee
</td>
<td id="policytd" class= "anotherfield" width="25%"></td>
store.find()方法将返回promise,在日志中打印时对象未解析。
将您的脚本更改为此类内容。
var includedFrameworkModel = this.store.find('frameworks', includedFramework);