在Ember中基于关系访问异步加载的对象
Accessing asynchronously loaded object based on relations in Ember
我在Ember中有一个异步加载模型的麻烦。我以为我已经了解了整个"背景烬魔法",但我没有。
我有两个模型,比如foo和boo,它们具有这些属性:
foo: category: DS.belongsTo("boo", { async: true })
boo color: DS.attr("string")
在我的路由中,我加载了所有foo
s:
model: function(params) {
return this.store.findAll("task", "");
},
在我的模板中,我渲染了一个组件:{{my-component model=model}}
。在组件的代码中,我需要将模型转换为另一种形式,所以我有:
final_data: function() {
this.get("model").forEach(function(node) {
console.log(node.get("category"));
});
return {};
}.property("model"),
当我尝试访问模型中的"category"时,我的代码崩溃了:
EmberError@http://localhost:4200/assets/vendor.js:25705:15
ember$data$lib$adapters$errors$$AdapterError@http://localhost:4200/assets/vendor.js:69218:7
ember$data$lib$adapters$rest$adapter$$RestAdapter<.handleResponse@http://localhost:4200/assets/vendor.js:70383:16
ember$data$lib$adapters$rest$adapter$$RestAdapter<.ajax/</hash.error@http://localhost:4200/assets/vendor.js:70473:25
jQuery.Callbacks/fire@http://localhost:4200/assets/vendor.js:3350:10
jQuery.Callbacks/self.fireWith@http://localhost:4200/assets/vendor.js:3462:7
done@http://localhost:4200/assets/vendor.js:9518:1
.send/callback@http://localhost:4200/assets/vendor.js:9920:8
在我看来,烬没有加载boo
s。我应该如何访问他们的权利,使Ember加载他们?
正在尝试加载category
,但适配器遇到一些错误。从你的例子中看不出来。
检查网络选项卡
当你从模板访问异步关联时,Ember知道该怎么做。从代码(例如组件的逻辑)中,Ember不知道它需要检索关联,直到您尝试get
它。get
将触发加载,但将返回一个promise。你可以这样做:
get_final_data: function() {
Ember.RSVP.Promise.all(this.get("model") . map(node => node.get('category'))
.then(vals => this.set('final_data', vals));
}
我相信您可以看到,这为每个节点的类别创建了一个承诺数组,调用Promise.all
等待它们全部完成,然后将结果存储到final_data
属性中。
注意,这不是一个计算属性;这是一个函数/方法,必须在某个时候调用,也许在afterModel
。
相关文章:
- 异步循环使用递归:如何访问推送数组数据
- 如何访问回调函数之外的异步angularjs服务数据
- 在 JavaScript 中的异步回调函数中访问“this”
- JavaScript私有方法,异步访问
- Angular2 模板尝试在异步数据存在之前访问它
- 异步脚本不可访问
- JavaScript 访问 Angular 范围返回“未定义” - 异步问题
- 在噩梦中循环访问 url 时的异步挑战.js
- “异步”循环访问JavaScript中的对象
- 同步与异步数据库访问
- Node.js JavaScript如何在异步事件处理程序中访问oject数据;socket.on”;在TCP服务器中
- 在异步加载文件后使用promise()访问类
- 我如何访问URL参数在Javascript异步加载由require.js
- 从回调(异步方法)内部访问对象文字属性
- 访问全局变量和异步问题
- 从异步调用访问成员方法
- 在Ember中基于关系访问异步加载的对象
- 访问从异步函数输出的变量
- 使用callback异步访问$get
- 使用带有匿名回调函数的异步XMLHttpRequest()全局访问从本地文件读取的JSON对象