我有一个 ember 模型,它有一个计算属性,这是一个 promise 。我试图在模板中显示解析后的值,并且只有在属性上执行 .content
才能使其正常工作,这感觉不对。下面是我的代码。
(http://emberjs.jsbin.com/gijozojehe/1/edit?html,js,output)
App = Ember.Application.create();
App.Router.map(function() {
// put your routes here
});
App.IndexRoute = Ember.Route.extend({
model: function() {
return [
this.store.createRecord('foo')
];
}
});
App.FooModel = DS.Model.extend({
name: Ember.computed(function() {
return DS.PromiseObject.create({
promise: Ember.RSVP.resolve('foo')
});
}),
anotherName: Ember.computed(function() {
return "Hello";
}),
otherName: "Hello"
});
模板:
<ul>
{{#each model as |item|}}
<li>{{item.name}} {{item.anotherName}} {{item.otherName}}</li>
{{/each}}
</ul>
我期望使用 DS.PromiseObject
来处理我所看到的复杂性,为什么不是呢?如何确保我的模板不知道有支持该值的 promise ?
最佳答案
Promise 对象代理 Promise 结果的属性,但对 Promise 对象的引用仅返回 Promise 对象。如果您考虑一下引用,您就会明白为什么没有其他解决方法,甚至,promise 对象为您提供了异步事件的机制。
本质上这是 Promise 对象的获取逻辑:
- 有东西请求 Promise 对象上的属性
- 如果 promise 得到解决,请从内容对象中获取该属性
- 如果不是,则返回未定义
promise 的结果被放置在内容属性上,这就是您如何破解它以使其工作的方式。
说实话,我不确定你为什么在这里使用 Ember 数据,你没有使用任何 Ember 数据字段等。但是这里是如何使用 Promise 对象(关键字对象) .
代码
user: Ember.computed(function() {
return DS.PromiseObject.create({
promise: Ember.RSVP.resolve({name: 'foo'})
});
}),
模板
{{model.user.name}}
关于ember.js - 模型 promise 导致模板使用 .content,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30132283/