每次url在ember应用程序中更改时,消防路径/控制器都会挂钩

时间:2015-05-30 20:22:45

标签: javascript ember.js

我在这个应用程序中有两个路由由在rails侧具有访问控制逻辑的模型支持。因此,当他们第一次加载到应用程序时,他们有一个isUnlocked属性,我在模型加载后检查。如果未解锁该属性,则路由应重定向。

所以,如果我的路由器是这样的:

this.route('thing', { path: 'thing/:thing_id' }, function() {
  this.route('resource', { path: 'resource/:resource_id' });
});

我的“资源”路线扩展如下:

import AuthenticatedRoute from 'doki/routes/authenticated';

export default AuthenticatedRoute.extend({

  requireDean: false,

  activate() {
    this._super();
    this.checkAccess();
  },

  afterModel() {
    this._super();
    this.checkAccess();
  },

  resetController() {
    this._super();
    this.checkAccess();
  },

  checkAccess() {
    // here is where I'll check the model's isUnlocked property and 
    // redirect if it's false or not set
    console.log('checkAccess');
  }

});

当我输入/ thing / 1 / resource / 1时,资源= 1的模型由ThingResourceRoute加载,但如果在商店中已经加载了resource = 2,如果我点击到/ thing / 1 / resource / 2,activate不会触发,setupController不触发等,所以我不确定在哪里进行checkAccess()测试。

每当URL更改时,检查isUnlocked属性的最佳位置是什么,因为“activate”,“resetController”等等,当URL更改为相同路由但不同的项目具有不同的isUnlocked时不会触发属性。

我是否可以实现一个永远被调用的钩子?在renderTemplate中进行访问检查似乎有效,但这似乎不是正确的地方。

我是否应该在通过API调用更新模型后使模型无效?如果我在本地将isUnlocked设置为true(并且不通过API保持模型),那么我将在路由/控制器链中添加检查,以便每次尝试“访问”该模型时都会检查它?

1 个答案:

答案 0 :(得分:1)

看起来每次输入URL时都会触发SELECT JCTRANSACTIONS.Job, JCTRANSACTIONS.CostCode, JCTRANSACTIONS.Date, JCTRANSACTIONS.Amount, JCJOB.Description, JCCOSTCODE.Description FROM "\\Network\".JCCOSTCODE JCCOSTCODE, "\\ Network \".JCJOB JCJOB, "\\ Network \".JCTRANSACTIONS JCTRANSACTIONS WHERE JCJOB.Job = JCTRANSACTIONS.Job AND JCCOSTCODE.Cost_Code = JCTRANSACTIONS.Cost_Code AND JCCOSTCODE.Job = JCJOB.Job AND JCCOSTCODE.Job = JCTRANSACTIONS.Job 事件 - 即使模型已经加载,控制器已经设置,并且挂钩全部被触发 - 所以我要检查didTransition中的模型:

didTransition