我的应用有评论,在这里我试图保存评论以及发表评论的当前用户的详细信息。
在第一个例子中,我只是试图查找有效的用户记录并明确地执行此操作。
# comments.js.coffee
App.CommentsController = Ember.ObjectController.extend
actions:
createComment: ->
comment = @store.createRecord('comment')
comment.set('body','hope eternally')
comment.set('section', @get('model'))
user = @store.find('user', 3)
comment.set('user', user)
comment.save()
由于未设置用户字段,因此返回错误。
IRC #emberjs peeps帮助我理解@ store.find是异常的,我需要处理承诺才能使其发挥作用。
这是我的大部分代码,我甚至玩过单独的CurrentUserController并给它自己的适配器,但是没有完成,但你可以在商店看到我的代码
# models/comment.js.coffee
App.Comment = DS.Model.extend
body: DS.attr('string')
user: DS.belongsTo('user')
created_at: DS.attr('date')
section: DS.belongsTo('section')
用户模型
# models/user.js.coffee
App.User = DS.Model.extend
email: DS.attr('string')
评论路线
# routes/comments.js.coffee
App.CommentsRoute = Ember.Route.extend
currentUser: ''
activate: ->
@controllerFor('plan').set 'editMode', true
window.scrollTo(0,97)
@set('currentUser', @store.find('user',3))
deactivate: ->
@controllerFor('plan').set 'editMode', false
商店..
# store.js.coffee
DS.RESTAdapter.reopen
namespace: 'api/v1'
App.ApplicationStore = DS.Store.extend
App.ApplicationAdapter = DS.ActiveModelAdapter.extend
headers: (->
"X-CSRF-Token": $('meta[name="csrf-token"]').attr('content')
).property().volatile()
App.CurrentUserAdapter = DS.RESTAdapter.extend
pathForType: "/sessions/current"
和路由器..
# router.js.coffee
App.Router.map ->
@resource 'plans', path: '/', ->
@resource 'plan', path: 'plans/:id', ->
@route 'edit'
@resource 'section', path: 'sections/:section_id', ->
@route 'edit'
@resource 'comments', path: 'comments'
[编辑1:修改控制器和路线] 在@lauren的帮助下,我已经将她的代码演绎到了这一点。
# comments_controller.js.coffee
App.CommentsController = Ember.ObjectController.extend
needs: 'plan'
editMode: true
actions:
saveComment: ->
@get('model').save()
.then ->
@get('section.comments')
.then (comments) ->
comments.pushObject comment
true
.catch (error) -> console.debug error
close: ->
@transitionToRoute('plan.index')
这是修改后的路由器
# comments_route.js.coffee
App.CommentsRoute = Ember.Route.extend
activate: ->
@controllerFor('plan').set 'editMode', true
window.scrollTo(0,97)
deactivate: ->
@controllerFor('plan').set 'editMode', false
model: ->
Em.RSVP.hash
section: @modelFor 'section',
user: @store.find 'user', 3
model: @store.createRecord 'comment'
答案 0 :(得分:1)
您的问题是您没有在评论控制器和路由上正确设置用户。在您的路线中,您应该在model
挂钩上设置这些属性,而不是activate
。
在下面的我的要点中,我设置了路线的模型,以获取空注释(未保存)和用户记录的哈希值。然后我在model
挂钩的控制器上设置user
和setupController
属性。