Ember.computed.any具有同步和异步属性

时间:2014-07-18 19:33:58

标签: ember.js ember-data

App.Farm = DS.Model.extend
  location: DS.attr 'string'

App.Field = DS.Model.extend
  location: DS.attr 'string'
  farm: DS.belongsTo 'farm', async: true
  markerLocation: Ember.computed.any('location', 'farm.location')

其他地方:

location = field.get('markerLocation')

如果字段的位置值为空,位置是否等于服务器场的位置值?如果没有,那么完成这项工作的方法是什么?

基本上,这里的问题是:

如果我想获取markerLocation值,并且我没有使用绑定,我该怎么做才能在没有设置同步时等待异步值?即使在观察者的内心,我也很难做到这一点。

也许是这样的:

markerLocation: ( -> 
  promise = new Ember.RSVP.Promise (resolve) =>
    location = @get('customLocation')
    if location
      resolve(location)
    else
      @get('farm').then (farm) ->
        resolve(farm.get('location'))
).property('location', 'farm.location')

然后通过这样做来获得它:

location = field.get('markerLocation').then (location) ->
  # do something with location

现在尝试让它以这种方式运作,并且有一些承诺(没有双关语)。

1 个答案:

答案 0 :(得分:0)

  1. 问题:是
  2. 问题:就像你在这个jsbin上做过的那样:http://emberjs.jsbin.com/pukewo/1/edit
  3. 使用第11行播放,您将看到结果。