Route的模型钩子参数

时间:2014-09-16 17:03:37

标签: ember.js

我的老板开了一个应用程序,现在我们正在使用夹具数据。应用程序路由有一个模型钩子:

model: function(){
        return this.store.find('user', 1);
    }

这基本上会设置登录用户。现在我添加了登录路线,现在我想要执行以下操作: 1)当加载应用程序时,将没有登录用户,应用程序将自动转换为登录。

2)用户输入登录信息,当它正确时,即应用程序路径的模型获取数据

2的第二部分是我将被困住的地方。我知道如何将用户ID从登录控制器发送到应用程序控制器,但是如何告诉模型根据控制器userId属性返回用户?基本上找到(' user,userID)userID来自控制器?

1 个答案:

答案 0 :(得分:1)

您应该查看Ember Simple Auth

我目前正在应用中使用它,并发现它非常有助于提供您需要的功能。使用它就像从mixin扩展每条路径一样简单:

// app/routes/application.js
import ApplicationRouteMixin from 'simple-auth/mixins/application-route-mixin';

export default Ember.Route.extend(ApplicationRouteMixin);

这将调用您的身份验证挂钩(只需查看文档)或重定向到您的身份验证路由,您可以在其中定义登录逻辑。

然后你可以用有效的会话检查来包装东西:

{{#if session.isAuthenticated}}
  <a {{ action 'invalidateSession' }}>Logout</a>
{{else}}
  {{#link-to 'login'}}Login{{/link-to}}
{{/if}}

会话可以作为属性传递给组件,也可以在应用程序控制器上设置,并通过控制器中的needs帮助程序进行访问。

至于设置模型,您不必使用模型钩子。

action: {
    login: function(userId){
        var self = this;
        //on fulfillment of promise, set the controller's model
        this.store.find('user', userId).then(function(returnedUser){
            self.controller.set('model', returnedUser);
        }
    }
}

此技术依赖于发送的操作,其中userId是一个参数,因此使用把手助手{{action 'login' 1}}或控制器方法可以更灵活地使用该方法:this.send('login', 1)

您的登录控制器还可以拥有一个在登录时设置的属性userId

您的登录控制器,而不是接收userId参数,只需通过登录控制器访问此属性:this.controllerFor('login').get('userId')有很多方法可以完成您想要的任务。 Ember Simple Auth可能是最好的,但如果你想要推出自己的