Spine.js和两个控制器

时间:2012-06-25 15:03:44

标签: spine.js

立即声明:不要将此问题视为真正的应用程序。一切都是为了自我教育和学习spine.js而完成的。

其次,我知道这种关系。我不想使用,因为世界比简单的关系更广泛。例如,一个页面包含您想要显示现在在线用户的文章,或者所有参与撰写文章的人。

想象一个普通的应用程序,它显示您可以创建,显示,编辑和删除的帖子列表。所有在spine.js上,一切正常。基于spine.rails3应用程序。 然后我添加了注释模型,其中包含字段post_id和body。并在veiw Show上添加了按钮评论。我想要的只是按下按钮评论来加载本文的评论。 我的评论.js.coffee:

    class App.Comment extends Spine.Model
      @configure 'Comment', 'post_id', 'body', 'created_at', 'updated_at'
      @extend Spine.Model.Ajax

      @fetch_comments: (id) =>
        params =
          data: {post_id: id}
          url: '/comments/fetch'
          processData: true

        @ajax().fetch(params)
        true

在Rails控制器中:

def fetch
  @comments = Comment.where("post_id = ?", params[:post_id])
  respond_with @comments
end

在Chrome控制台中一切正常:

App.Comment.fetch_comments(11)
App.Comment.all()

使用post_id = 11从服务器接收所有评论。

而我的问题是我不知道如何从控制器上做同样的事情帖子:-( 在我的posts.js.coffee中:

class Show extends Spine.Controller
events:
  ......
  'click [data-type=show]': 'comments'
comments: ->
  @log(@item.id)
  new App.Comments(@item.id)

这里的问题....如何实现控制器App.Comments,所以从服务器加载需要注释? 现在我的控制器看起来像:

Comment = App.Comment

class Index extends Spine.Controller

  constructor: (id)->
    super
    **App.Comment.fetch_comments(id)**   


class App.Comments extends Spine.Stack
  className: 'comments stack'

  controllers:
    index: Index

  routes:
    # '/comments/new':      'new'
    '/comments/':          'index'

  className: 'stack comments'

并且在选定的行上无效。我不知道该怎么做......

主要问题是如何使用特定参数从另一个控制器调用控制器,结果显示在主控制器中?

也许这是noob问题,但我希望得到你的帮助。 非常感谢提前。

1 个答案:

答案 0 :(得分:0)

我发现你正在使用脊柱堆栈。堆栈在由堆栈管理的控制器中传递。所以在Index内你可以使用@stack访问父堆栈。