M、V、C 数组与 Controller 内需要数组

Posted

技术标签:

【中文标题】M、V、C 数组与 Controller 内需要数组【英文标题】:M, V, C arrays vs require array inside Controller 【发布时间】:2013-11-25 07:24:04 【问题描述】:

Sencha 预加载依赖的方式是什么?

在控制器内部,像这样将视图、存储在数组中是不是更好:

views: ['Full.Path.To.View', 'Full.Path.To.View'],
stores: ['Full.Path.To.Store', 'Full.Path.To.Store']

或者就在requires里面:

requires: ['Full.Path.To.View', 'Full.Path.To.View', 'Full.Path.To.Store', 'Full.Path.To.Store']

在某些情况下(当我想要 Ext.syncRequire() 时)仅适用于第二个选项,所以我想要您的意见。所以,这是在 Controller 内部调用的,而不是在 Ext.application 的 app.js 内部调用。

谢谢!

编辑:

这是我的解决方案和愿景:

var views = ['MyApp.view.Login.LoginForm', 'MyApp.view.Main.Index'];
var models = ['MyApp.model.Company'];
var stores = ['MyApp.store.Tables'];
var senchaData = ['Ext.field.Text', 'Ext.Button'];

var dependencies = [].concat(views, models, stores, senchaData);

Ext.define('MyApp.controller.Login', 
    extend: 'Ext.app.Controller',
    requires: dependencies,
    config: 

        refs: 
            loginForm: '#loginForm',
            loginButton: '#loginForm #loginButton'
        ,

        control: 
            loginButton: 
                tap: 'onLogin'
            
        

    ...

【问题讨论】:

你能澄清你的问题吗? 我决定编辑我的答案。请查看我的编辑 【参考方案1】:

您必须了解类管理器如何解决控制器依赖关系,因为这会产生影响。

注意:我上次深入研究控制器类时使用的是 ExtJS4.2 版本,因此可能会略有变化。

这些数组(模型、视图、控制器)有一些好处。 一个好处是由于数组不同,代码更简洁,第二个好处是控制器可以根据应用名称空间和数组预测每个类的名称空间。您必须知道这些数组在定义时间内得到解析!

现在这三个数组很好,但是类管理员不知道它们,这就是为什么Ext.app.Controller 会为此注入适当的钩子。当类扩展时会触发钩子,并且需要在四个数组之一(模型、商店、视图、控制器)中找到所有类。这会强制类管理器立即加载这些类。

请注意,Ext.app.Application 是唯一一个初始化控制器的函数,但由于 ExtJS4.2,您可以轻松完成它。

根据您的信息,我只能说这些。如果这没有帮助,请在加载失败的情况下更准确。

编辑

为什么不这样定义呢?读起来更好,不是吗?

Ext.define('MyApp.controller.Login', 
    extend: 'Ext.app.Controller',

    views: ['Login.LoginForm', 'Main.Index'],
    models: ['Company'],
    stores: ['Tables'],
    requires: ['Ext.field.Text', 'Ext.Button'];
    //...

【讨论】:

我从中学到了很多。你可以再次检查我的问题,因为我已经提出了我的解决方案。我会把你的问题标记为答案。 +1 你帮了我很多次,所以......非常感谢! @NullCod3 不客气;)我会根据您上次的编辑评论您的问题 可以,但是如果我用Ext.syncRequire('MyApp.controller.MyController');动态加载控制器就不行了。 @NullCod3 这是因为 Ext.app.Application 实例被绕过,它初始化了控制器。试试这个Ext.Loader.syncRequire('FullControllerName', function()applicationInstance.getController('FullControllerName'), scope); - 这将需要该类,然后通过初始化它的应用程序获取它。 你是怎么知道的? XD 我的意思是,我几乎阅读了整个文档,我怎么会知道这些?

以上是关于M、V、C 数组与 Controller 内需要数组的主要内容,如果未能解决你的问题,请参考以下文章

区别MVC和mtv

CI环境配置

python框架面试题联系

MVC模式中M,V,C每个代表意义,并简述在Struts中MVC的表现方式。

django框架学习(增删查改)

Django--