ember.js - 模型 promise 导致模板使用 .content

标签 ember.js ember-data

我有一个 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 对象的获取逻辑:

  1. 有东西请求 Promise 对象上的属性
  2. 如果 promise 得到解决,请从内容对象中获取该属性
  3. 如果不是,则返回未定义

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/

相关文章:

ember.js - 无法读取 Ember.DefaultResolver.extend.podBasedComponentsInSubdir 未定义的属性 'match'

javascript - Ember 数据适配器 header 未包含在请求中

javascript - 如何防止 Ember Rails 模板泄漏到浏览器中?

ember.js - Ember Data,如何使用registerTransform

ember.js - Emberjs : How to get a single object from find() (findAll)

ember.js - 每当 {{input}} Ember Handlebars 帮助器的值发生变化时调用 Controller 方法

javascript - 如何在初始化后更新 View ,但不使用 didInsertElement() ?

ember.js - 覆盖 buildURL 方法以包含父模型的 id

javascript - Ember 模型回滚将 View 重置为之前的状态

javascript - 避免展示新模型本身