【发布时间】:2016-03-24 03:11:00
【问题描述】:
我正在进行 ember 1.12.1 -> 1.13.11 和 ember data 1.0.0-beta.19.1 -> 1.13.15 更新。我之前有一个模板:
{{a-component parent=model.parent}}
和一个组件
parentChanged: on('init', observer('parent', function() {
var parent = this.get('parent');
if (parent) {
parent.get('child').then(child => {
this.set('child', child);
});
}
}))
这以前有效,但在更新后,child 在then 调用后未定义。我不得不把它改成
parentChanged: on('init', observer('parent', function() {
var parent = this.get('parent');
if (parent) {
parent.then(parent => {
parent.get('child').then(child => {
this.set('child', child);
});
});
}
}))
让它恢复到更新前的工作状态。
有人知道这是为什么吗?似乎模板在更新后停止解析承诺。
【问题讨论】:
-
我赌的是无证行为不要等待它解决,以便它可以呈现承诺。也可能不相关,但我的建议是在
{{a-component}}所在的控制器/路由(或组件)中处理所有承诺。这样a-component已经得到了一个已解决的值,而不是一个承诺。可能会让您的生活更轻松。 -
我非常同意这段代码需要重构。因此,如果我在模板中有其他内容,例如
{{b-component child=model.parent.child}},它可能是其他组件的副作用? -
它可能会起作用,不知道 :) 我根本没有真正依赖这种行为,而是 optet 来处理路由器或父组件中的承诺,但你可能会尝试它会感兴趣结果,如果你可以回帖。
-
我一直认为,如果你在提供给组件时以一个 promise 结尾,它会在它到达组件代码时解决,但它可能是无意中这样做的,并拖累了我这一切时间!
-
如果你将一个承诺传递给一个组件,它会收到一个承诺(就像其他所有值一样,如果你不使用帮助器,因为它们可以改变值),值不会在两者之间改变。 Afaik 仅当您在模板中使用它时(所以
{{promise.name}})ember 隐式等待承诺解决并尝试使用它。
标签: javascript handlebars.js ember-data htmlbars ember-1