商店承诺在模板中解决,但在控制器中没有

时间:2014-07-28 23:17:53

标签: ember.js

我有一个选择框,其中包含我从商店获得的用户列表。我在控制器上有一个方法,我尝试获取selectbox的初始用户。无论我做什么,我似乎无法获得任何用户记录来解决该方法,但用户在选择框中显示正常。有人能解释我错过的东西吗?提前感谢您的帮助。

控制器:

App.TodoModuleController = Ember.ObjectController.extend
  users: Em.computed -> @store.findAll 'user'

  selectedUser: Em.computed 'users', ->   
    @get('users').objectAt(1)
    # There are 4 users in the db. Just using 1 for a test.

    # I also tried
    # @get('users').then (users)->
    #   users.objectAt(1)

  selectedUserDidChange: Em.observer 'selectedUser', ->
    if @get 'selectedUser' then @assignUser()

  assignUser: ->
    model = @get 'model'
    model.set 'assigneeId', @get('selectedUser').get('id')
    unless model.save()
      console.log 'Error: TodoModuleController.assignUser'

模板:

{{view Em.Select content=users selection=selectedUser optionValuePath='content.id' optionLabelPath='content.firstName'}}

解决方案(感谢Hrishi):

Todo模特:

App.Todo = DS.Model.extend
  text: DS.attr 'string'
  assignee: DS.belongsTo 'user', inverse: null

Todo Controller:

App.TodoModuleController = Ember.ObjectController.extend
  users: Em.computed -> @store.findAll 'user'

  assignedUserDidChange: Em.observer 'assignee', ->
    if @get 'assignee' then @assignNewUser()

  assignNewUser: ->
    unless @get('model').save()
      console.log 'Error: TodoModuleController.assignUser'

选择框:

{{view Em.Select content=users selection=assignee optionValuePath='content.id' optionLabelPath='content.firstName'}}

1 个答案:

答案 0 :(得分:2)

在某人(在您的情况下,模板)尝试访问它们之前,不计算计算属性,换句话说,它们是懒惰计算的。由于模板会尝试访问它们,因此users数组将被填充,您可以在单击选择框时在页面上看到它。我这样做的方法是在名为assignee的模型上放置一个属性,并将视图的选择直接绑定到该模型。