【发布时间】:2012-12-14 22:27:10
【问题描述】:
我想在控制器中动态添加视图和存储。所以,我有这个:
Ext.define('App.controller.MyController', {
extend: 'Ext.app.Controller',
stores: ['App.store.Users'],
views: ['App.view.Users.Index'],
我正在动态创建这个控制器:
var controller = this.getController("Users");
如何动态添加商店和视图,例如:
var controller = this.getController(moduleID);
controller.stores = [];
controller.views = [];
controller.stores.push('App.store.Users');
controller.views.push('App.view.Users.Index');
但是当我这样做时,它不起作用。控制台告诉我 Ext 不能“从未定义中缓冲”,所以我认为我必须使用 Ext.apply() 或 Ext.merge() 或类似的东西来获得 getters 和 setters for @987654328 @。
你怎么看?
为@asgoth 编辑:
当您使用this.getController("nameOfController"); 并且控制器不存在时,Ext-JS 会为您创建一个。这是 100% 有效的,因为当我 console.log(controller); 我正在获取数据时(文档也这么说)。 :)
【问题讨论】:
-
使用 Ext.define() 你只是在定义你的控制器。您应该使用 Ext.create() 或 new App.controller.MyController() 创建它
-
查看编辑部分。 :)
-
你有堆栈跟踪或者你能指出错误发生的位置吗?
-
老实说,您尝试做的事情似乎很奇怪。 MVC 框架的 oop 设计的重点是控制器知道他们控制哪些视图(以及哪些模型/存储)。我不禁觉得有更好的方法来实现你想要做的事情。你能解释一下这样做的理由吗?
-
我在这里与@Izhaki 在一起,尝试动态添加商店和视图似乎您试图避免需要创建显式控制器。如果是这种情况,您打算将控制视图和用户交互的逻辑放在哪里?
标签: javascript extjs