簡體   English   中英

Meteor.js鐵路由器和類似或動態路由

[英]Meteor.js Iron Router and similar or dynamic routes

我正在嘗試為我的網站上的管理部分構建動態路由,以便“/ admin”和“/ admin / users”以及“/ admin / users / add”等工作。 我嘗試了一些不同的組合,但仍然在努力解決這個問題。 以下是我嘗試過和不同的事情。

理想情況下,如果我可以指定“/ admin”但動態引用每個new /作為最適合在代碼中處理的參數。 示例“/ admin / 1/2/3/4/5”並且能夠引用1 2 3等我雖然在文檔中沒有看到這樣的內容。

Router.route('/admin', {
    name: 'admin',
    path: '/admin',
    template: 'admin',
    layoutTemplate: 'layout_admin',
    action: function() {
        Session.set('apage', 'dashboard');
        Session.set('asect', null);
        this.render();
    }
});

// Not Working...
Router.route('/admin/:apage', {
    name: 'admin',
    path: '/admin/:apage',
    template: 'admin',
    layoutTemplate: 'layout_admin',
    action: function() {
        Session.set('apage', this.params.apage);
        Session.set('asect', null);
        this.render();
    }
});

// Not Working...
Router.route('/admin/:apage/:asect', {
    name: 'admin',
    path: '/admin/:apage',
    template: 'admin',
    layoutTemplate: 'layout_admin',
    action: function() {
        Session.set('apage', this.params.apage);
        Session.set('asect', this.params.asect);
        this.render();
    }
});

編輯(已回答)

經過一些測試后,似乎應該(或最簡單地完成)在this.render()行中調用模板,並且路由應該從最嚴格/詳細到最少 - 我之前嘗試過。 問題似乎是在template:上使用this.params template: line。 這個解決方案並不完美,但可以針對可能遇到類似問題的任何人發布。 對於像“/ admin / 1/2/3/4/5”這樣的網址中的其他變量,似乎他們需要額外的路由而且不能完全動態,因為“/”不能進入參數和路由器會查找路由並返回notFound,除非您可以顯式匹配路由。 可能有一個我沒找到的解決方法。

工作代碼如下:

Router.route('adminPage', {
    path: '/admin/:asect/:apage',
    template: 'admin',
    layoutTemplate: 'layout_admin',
    action: function() {
        Session.set('asect', this.params.asect);
        Session.set('apage', this.params.apage);
        this.render('admin_' + this.params.asect + '_' + this.params.apage);
    }
});

Router.route('adminSect', {
    path: '/admin/:asect',
    template: 'admin',
    layoutTemplate: 'layout_admin',
    action: function() {
        Session.set('asect', this.params.asect);
        Session.set('apage', null);
        this.render('admin_' + this.params.asect);
    }
});

Router.route('admin', {
    path: '/admin',
    template: 'admin',
    layoutTemplate: 'layout_admin',
    action: function() {
        Session.set('asect', 'dashboard');
        Session.set('apage', null);
        this.render('admin_dashboard');
    }
});

有一種方法可以在路線中有可選參數(除非我弄錯了,否則你正在尋找它)。 考慮到這一點,您應該能夠使用一個路由器進行管理。

Router.route('admin',{
    path: '/admin/:asect?/:apage?',
    template: 'admin',
    layoutTemplate: 'layout_admin',
    action: function() {

        var asect  = this.params.asect || 'dashboard',
            apage  = this.params.apage || null,
            render = (function(){
                if(apage !== null) {
                    return 'admin_'+ asect +'_'+ apage;
                } else {
                    return 'admin_'+ asect;
                }
            })();

        Session.set('asect', asect);
        Session.set('apage', apage);
        this.render(render);
    }
});

? path每個參數將其指定為可選參數之后。 您應該能夠檢查它是否已定義或以其他方式分配默認值,然后相應地構建您的視圖和會話。

注意:您可以在此MeteorPad中進行測試 - 只需根據示例模板的名稱更新URL。

http://meteorpad.com/pad/Ri4Np5xDJXyjiQ4fG

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM