我有一个选择框,其中包含我从商店获得的用户列表。我在控制器上有一个方法,我尝试获取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'}}
答案 0 :(得分:2)
在某人(在您的情况下,模板)尝试访问它们之前,不计算计算属性,换句话说,它们是懒惰计算的。由于模板会尝试访问它们,因此users
数组将被填充,您可以在单击选择框时在页面上看到它。我这样做的方法是在名为assignee
的模型上放置一个属性,并将视图的选择直接绑定到该模型。