Ember - 从JSON读取currentUser并使用它创建currentUser并在另一个模型记录中使用它

时间:2014-11-17 05:52:56

标签: json ember.js ember-data

我的应用有评论,在这里我试图保存评论以及发表评论的当前用户的详细信息。

在第一个例子中,我只是试图查找有效的用户记录并明确地执行此操作。

# 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'

1 个答案:

答案 0 :(得分:1)

您的问题是您没有在评论控制器和路由上正确设置用户。在您的路线中,您应该在model挂钩上设置这些属性,而不是activate

在下面的我的要点中,我设置了路线的模型,以获取空注释(未保存)和用户记录的哈希值。然后我在model挂钩的控制器上设置usersetupController属性。

试试这个 - https://gist.github.com/poteto/8023b0c360e7af40672a