骨干路由和查看状态

时间:2013-02-23 20:34:57

标签: backbone.js backbone-routing

为可能制作不佳的标题道歉。 Backbone的新手。

我无法绕过如何处理与视图相关联的路线。基本上我有一个视图(我们称之为ListView),根据其viewMode,使用不同的模板呈现ItemViews。它看起来像这样:

var ListView = Backbone.View.extend({

    // Cache a bunch of templates here

    viewMode: 'list', // Default is list

    render: function() {

        switch(this.viewMode) {
            case 'list':
                // Render ItemView based on list template
                break;

            case 'gallery':
                // Render ItemView based on gallery template
                break;

        }

        // Render all items in list
        this.collection.each(function(model, index) {
            new ItemView(); // Maybe pass viewMode as a parameter
        });

    }

});

我的目标是,每当ListView使用viewMode“列表”或“图库”时,这应该反映在地址栏中,同样也可以手动输入或点击导致例如 mysite.com/page.html#items/list #items / gallery 应呈现相同的结果。

有没有办法自动化这个过程,或以其他方式解决它?

1 个答案:

答案 0 :(得分:1)

认为你的路由器会是这样的:

var yourRouter = Backbone.Router.extend({

    routes: {
        "items/list":    "showList",
        "items/gallery": "showGallery"
    },


    showList: function() {
        listView.viewMode = "list"
        listView.render();
    }

    showGallery: function() {
        listView.viewMode = "gallery"
        listView.render();
    }

});

然后在您的视图事件中,您可以调用路由器的navigate方法。这将更新地址栏。

yourRouter.navigate("items/list")