【问题标题】:how do I show just one item of my marionette collection and navigate between them如何仅显示我的木偶收藏中的一项并在它们之间导航
【发布时间】:2026-01-07 04:30:01
【问题描述】:

我有路线

routes: { "pages/:id" :  "page"

         },
page: function (id) {                                                      
                    var pageView = new contentCollectionView({
                        collection: collection,
                        tagName: "div",
                        className: "pages"
                    });

                    pageView.close();
                    PAGE.content.show(pageView);

                },

但是我想做的是只显示我的集合中与我传递的 id 匹配的单个页面 - 我还希望能够从该页面导航到集合中的上一页和下一页。

所以 - 我如何在渲染时将标识符传递给我的 pageView,以便它只执行集合中的一项(我相信我知道如何在循环通过时获取集合中的项目索引,但是如果你也想展示一个例子,那就太好了)

【问题讨论】:

    标签: marionette backbone-routing


    【解决方案1】:

    根据您的要求,我建议渲染 ItemView 而不是 CollectionView。 如果你有 CollectionView 你肯定有 ItemView :) 并从您的集合中通过 ID 模型传递特殊的。

    所以你的代码可能看起来像这样:

    page: function (id) {                                                      
        var pageView = new contentItemView({
            model: collection.get(id)
        });
        pageView.close();
        PAGE.content.show(pageView);
    }
    

    关于导航 - 您可以使用集合中模型的 at 方法索引来实现导航逻辑。如果您还需要保留浏览器导航(后退和前进按钮),您必须结帐Backbone.history

    【讨论】:

    • 我不明白它是如何工作的 - 集合是一个对象数组,每个对象内部都有一个属性 pageid,它是我需要获取的 id。所以我想我可以在模型上为我的集合使用 idAttribute: "pageid",但是当我执行 collection.get(id) 时,它只是返回一个空对象。
    • 不,集合它不是一个数组——它的对象带有方法和哈希模型——它是一个数组。关于 idAttribute - 你是对的 - 当你从后端获取你的集合时,你可以使用它的 id。 + 确保参数 id 是整数
    • 好的,我猜这是缓存问题 - collection.get(id) 正在使用 idAttribute 集。
    最近更新 更多