解决过滤器上的承诺

时间:2014-08-18 21:24:44

标签: ember.js ember-data

我有一个过滤器,我无法解决它的承诺。它正在使用一个名为“患者”的模型,该模型具有多个“地址”,我想过滤掉地址类型为“主要”的地址。过滤器似乎正在工作,但只会返回一个承诺。提前感谢您的帮助。

患者控制器

App.PatientController = Ember.ObjectController.extend

  primaryAddress: Em.computed 'model.@each.addresses', ->
    @get('model.addresses').then (addresses)->
      addresses.filterBy 'addressType', 'Primary'

enter image description here

解决方案(感谢@GJK)

  primaryAddress: Em.computed 'model.addresses.@each', ->
    @get('model.addresses').filterBy('addressType', 'Primary').get('firstObject')

1 个答案:

答案 0 :(得分:1)

我能看到的最明显的问题是你没有看到地址的@each属性。您的属性取决于model.@each.addresses,这意味着您的model是一个数组,并且您正在观察该数组中每个项目的addresses属性。但是你没有观察addresses数组的内容,只是数组本身。

在我看来,您应该使用model.addresses.@each作为您的附属财产。这将观察单个模型上的所有地址,包括观察addresses数组的内容(在promise解析时更新)。

编辑:另外,我显然读得还不够。你不应该在承诺上调用then。将其视为已经解决,并在解决后进行更新。所以请改用它:

App.PatientController = Ember.ObjectController.extend
  primaryAddress: Em.computed 'model.addresses.@each', ->
    @get('model.addresses').filterBy 'addressType', 'Primary'

第一次使用此属性时,承诺将无法解析,因此过滤器不会返回任何内容。但是当promise解决后,属性将更新,过滤器将按照您的预期运行。