1

在 Ember.js 中,我试图以返回承诺的 ember-data 获取结果为条件绑定把手。

我知道承诺有一个成功的回调,但我不明白如何将成功的结果绑定到计算属性的值。计算属性的值似乎总是为真,因为它返回了承诺。

{{#if game.moreThanOnePlayer}}
  <span> it was true </span>
{{/if}}


App.Game = DS.Model.extend
  players: DS.hasMany 'App.Player'
  moreThanOnePlayer: (->

    promise = @get('players') #triggers ajax call that returns a promise

    promise.then(
    (players) -> #promise success call back
      return players.length > 1 #this is what I want the computed property value to be
    )

    #but the return value of the function is still a promise, which always evaluates to true.
    return promise
  ).property('players')

ember-data version: // 上次提交:ef11bff (2013-08-26 20:54:06 -0700)

4

2 回答 2

0

您应该在 Route 中加载数据并使 moreThanOnePlayer 成为计算属性。

有关示例,请参见http://jsbin.com/AJUWOJi/1/edit 。

于 2013-08-29T14:10:33.000 回答
0

我只是通过将部分代码包装在 Ember.run.once(...) 块中来解决了一个非常相似的问题。我拆分了我在车把中使用的属性和监视更改的代码。在你的情况下,我会尝试类似的东西:

App.Game = DS.Model.extend
  players: DS.hasMany 'App.Player'
  moreThenOnePlayer: DS.attr 'boolean'
  playersUpdated: (->
    promise = @get('players')
    g = @
    promise.then(
      (players) ->
        Ember.run.once ->
          g.set 'moreThenOnePlayer', players.length > 1
    )
  ).observes('players')
于 2013-09-06T14:09:54.987 回答