Sencha touch 为什么我应该使用Ext.dispatch而不是直接调用控制器代码?

Sencha touch 为什么我应该使用Ext.dispatch而不是直接调用控制器代码?,sencha-touch,extjs,Sencha Touch,Extjs,在Sencha Touch中使用[相对较新的]MVC位时,我发现90%的调度调用看起来像: Ext.dispatch({ controller: "customers", action: 'show', record: record }); controllers.customers.show({ record: record }); 这很好,我喜欢将流委托给单独的控制器代码,而不是复杂的事件路径,但我还没有看到比只执行以下操作有什么优势: Ext.dispa

在Sencha Touch中使用[相对较新的]MVC位时,我发现90%的调度调用看起来像:

Ext.dispatch({
    controller: "customers",
    action: 'show',
    record: record
});
controllers.customers.show({
    record: record
});
这很好,我喜欢将流委托给单独的控制器代码,而不是复杂的事件路径,但我还没有看到比只执行以下操作有什么优势:

Ext.dispatch({
    controller: "customers",
    action: 'show',
    record: record
});
controllers.customers.show({
    record: record
});
它更短更干净。我觉得我只是为了它才遵循
Ext.dispatch
模式。我的应用程序没有从状态的推送/弹出url历史中受益,这是我看到使用这种更长更复杂方法的唯一原因


我错过了什么?使用Ext.dispatch调用控制器有什么好处?

beforedispatch事件在您需要将它们重定向到其他控制器时非常方便

使用dispatch还可以根据需要加载控制器代码,而不是在页面加载时一次加载所有代码。我把应用程序的启动时间缩短了一半

你说你的应用程序不需要它,但我认为能够设置historyUrl并直接链接到页面将是其他用户的主要优势


因此,我想这一切都取决于应用程序使用它是否有意义。

您能否详细说明如何加载控制器代码JIT,或链接到有关此的教程?@TomášFejfar我将Ext.util.Dispatcher dispatch函数保存到一个闭包变量,然后用自己的代码替换dispatch。在新函数中,我查看了传递给dispatch的选项,这些选项应该包含控制器的名称。如果Ext.ControllerManager.get返回具有该名称的控制器,则调用原始分派函数。否则,我将使用requireJS动态加载包含控制器(即“/app/controllers/users”)的脚本(任何类似的库都可以)。当脚本加载完成后,我的控制器应该注册,我像往常一样调用dispatch.BTW这是为1.0完成的。Sencha touch 2.0可能会使我的方法过时。