使用ember.js进行命名空间路由,具有意外结果的不同方法

时间:2015-08-13 13:51:12

标签: javascript ember.js

我有一个简单的问题,我需要一些解释:

为什么这样做有效:

App.ApplicationAdapter.reopen({
    namespace: 'conversations/' + getSubuserEmail(),
});

App.Router.map(function(){
    // Routing list to raw namespace path
    this.resource('conversations', { path : '/' });
});

这样做并不是:

App.ApplicationAdapter.reopen({
    namespace: 'conversations/',
});

App.Router.map(function(){
    // Routing list to raw namespace path
    this.resource('conversations', { path : '/' + getSubuserEmail() });
});

后者没有触发我的模型钩子,例如,我的URL是:

app.rails.local:3000 /会话/ someEmail

感谢。

编辑:

因此,通过下面的评论,我用以下代码重写了我的路由器:

App.Router.map(function(){
    // Routing list to raw namespace path
    if(getSubuserEmail()){
        this.route('conversations', {path : '/:email'});
    } else {
        this.route('conversations', { path : '/' });
    }   
});

专业:

当在网址中找到电子邮件时,我希望ember-data用属于某个子用户的对话填充商店,该子用户的电子邮件与URL中的电子邮件匹配。

如果找不到电子邮件,我希望它能够检索所有子用户的所有对话。我的后端有两条路线。

现在的问题是,当URL中有电子邮件时,我的模型挂钩永远不会被触发,就像ember-data不能识别我的动态段一样。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

你不应该在App.Router.map中有任何逻辑。这种结构用于描述您的网址应该如何显示。您需要的配置看起来像

App.Router.map(function(){
    this.route('conversations', {path : '/'}, function(){
        this.route('index', {path : '/'});
        this.route('subuser', {path: '/:email'});
    });  
});

然后你应该创建实际的路由(如果你使用ember-cli,在app / routes / conversations / index.js和app / routes / conversations / subuser.js中),模板和编写你的代码。要调试您的应用程序,您应该安装扩展程序,ember检查程序(可用于chrome和FF)。它将显示您的所有路线,控制器和其他有用信息。