0

骨干关系对我来说太乱了,我似乎无法调试它。我试图避免使用此资产。

我的 Backbone 应用程序中有两个集合。

Voice.Collections.PostsVoice.Collections.Comments

这是我的路由器:

class Voice.Routers.Posts extends Backbone.Router
        routes:
                '': 'index'
        initialize: ->
                @collection = new Voice.Collections.Posts()
                @collection.reset($('#container').data('posts').reverse())
        index: ->
                view = new Voice.Views.PostsIndex(collection: @collection)
                $('#container').html(view.render().el)

我希望我的路由器有一个方法可以根据带有帖子 ID 的 url 过滤我的评论集合(作为我的评论 - 发布关系键,post_id),所以基本上“posts/12”(posts/:id)将调用一个函数 showComments : (id) -> 它将获取 id 并初始化评论集合,其中仅包含“post_id”等于 12(“id”)的评论。

我可以对我的路由器中的集合进行排序吗?像这样的东西?(这不起作用)

class Voice.Routers.Posts extends Backbone.Router
        routes:
                '': 'index'
                'post/:id/': 'showComments'
        initialize: ->
                @collection = new Voice.Collections.Posts()
                @collection.reset($('#container').data('posts').reverse())
        index: ->
                view = new Voice.Views.PostsIndex(collection: @collection)
                $('#container').html(view.render().el)
        showComments: (id) ->
                @comCollection = new Voice.Views.Collections.Comments()
                @comCollection = @comCollection.where ->
                      @model.get('post_id') = id
                comview = new Voice.Views.CommentsIndex(collection: @comCollection)
                $('#comContainer').html(comview.render().el)

但这不起作用,因为需要初始化 @comCollection。我只是不确定我应该怎么做。我还将满足于将评论集合呈现为来自另一个视图事件触发器的视图。感谢您的帮助。

编辑:

我必须使用 Backbone.navigate 吗?Backbone.navigate 会产生难闻的气味。

4

1 回答 1

1

我的 CoffeeScript 有点生疏了,所以我不记得具体是什么了:

@comCollection = @comCollection.where ->
                  @model.get('post_id') = id

翻译为普通的 Javascript。但是,如果使用得当,它绝对应该可以工作,所以如果您尝试使用更简单的语法:

this.comCollection = this.comCollection.where({post_id: id});

你可能有更好的成功?如果没有,您可能需要进入调试器并@comCollection在调用后检查其中实际包含的内容。

于 2013-01-03T20:52:25.930 回答