5

我还在学习 Extjs 和 mvc,所以我有一个设计问题,我相信有人可以为我解答。我的问题是:

我有 2 个控制器来处理两个不同的视图。调用两个控制器中的任何一个以根据用户类型呈现正确的视图。因此,在我的情况下,如果用户是管理员,那么他们将根据凭据获得管理员视图,如果该人是标准用户,那么他们将获得标准视图。决策逻辑应该放在 app.js 中还是应该有另一个控制器来决定调用哪个控制器?

我正在考虑的一种方式:

管理员控制器

Ext.define('adminController', {

      // handles admin 
})

标准用户控制器

Ext.define('standardController', {

      // handles standard 
})

应用程序.js

   Ext.application({
   name: 'MTK',
   autoCreateViewport: true,

     if(admin) {
       controllers: ['adminController']
     }
     else(std){
       controllers: ['standardController']
     }
});

另一个想法:

管理员控制器

Ext.define('adminController', {

    // handles admin 
})

标准用户控制器

Ext.define('standardController', {

    // handles standard
})

主控制器

Ext.define('mainController', {

   if(admin){
      call adminController
   } 
   else(std){
      call standardController
   }
})
4

3 回答 3

2

我不会在前端做(或至少做太多)这个。我想您应该能够在用户登录时知道用户角色。

对我来说,我是这样做的,但我必须说我有一个更复杂的 ACL,而且我不会用后端拒绝任何访问的模块或视图来打扰用户。

我正在使用这两种方法:

  • 成功登录后重新加载/重定向到应用程序视图(后端!)。服务器知道用户会话要交回什么
  • 成功登录后返回配置,女巫包含下一步需要的信息(这可能只是一个控制器或更多类)

两种方法都可以减少代码、更快的加载和更容易的调试

我希望这能为您指明正确的方向。

于 2012-12-20T16:04:37.460 回答
2

有趣的问题,我同意@sra 的观点,尽管这并不是说它不起作用,但它可能不是通过客户端逻辑执行此操作的正确方法。

在我一直在开发的应用程序中,我们使用了定义所有控制器的方法,这些控制器可能会或可能不会在“导航”样式控制器中调用。这是我们直接实例化的唯一一个,然后首先基于默认值,然后,我们选择直接交互来呈现适当的控制器和视图,这有点像@sra 建议的第二种方法。

我认为 sra 的第一种方法总的来说是明智的,但是当您可能有一个视图作为管理员应该是可编辑的并且作为用户应该是只读的时,问题就来了。您不想在这种情况下编写两个视图。

我没有尝试过的一件事(但这个问题让我想要!)是返回 a) 基于服务器端逻辑的稍微不同的模型,如“用户”或“只读用户”并将其弹出到同一个视图中(保存需要两个视图)或b)返回一个更复杂的模型,每个数据属性都带有一个“可编辑”标志。然后,这可用于在应用程序中呈现不同的字段或不同模式的字段.....我知道这并不能回答问题,但对您选择的方法以及您希望报告的任何发现感兴趣!

于 2012-12-20T20:16:54.823 回答
0

我认为正如 sra 正确指出的那样,让服务器向您发送有关登录用户类型的正确信息。在客户端,让一个控制器决定要呈现哪个视图。这应该是处理登录页面的同一控制器。CARD VIEW 是您可以用于此目的的布局。呈现页面后,让另一个控制器处理在该视图中触发的事件

并且控制器不应执行作为视图工作的渲染部分的任何方式,仅使用控制器对视图中触发的事件做出反应

于 2012-12-20T20:30:40.893 回答