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

Posted

技术标签:

【中文标题】为啥我应该使用 Ext.dispatch 而不是直接调用控制器代码?【英文标题】:Why should I use Ext.dispatch rather than calling controller code directly?为什么我应该使用 Ext.dispatch 而不是直接调用控制器代码? 【发布时间】:2011-05-29 15:26:20 【问题描述】:

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

Ext.dispatch(
    controller: "customers",
    action: 'show',
    record: record
);

这很好,我喜欢将流程委托给单独的控制器代码,而不是复杂的事件路径,但我还没有看到比仅仅执行以下操作有任何优势:

controllers.customers.show(
    record: record
);

哪个更短更干净。我觉得我只是为了它而遵循Ext.dispatch 模式。我的应用程序没有从状态的推送/弹出 url 历史记录中受益,这是我可以看到使用这种更长更复杂方法的唯一原因。

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

【问题讨论】:

【参考方案1】:

如果您需要将它们重定向到另一个控制器,则 beforedispatch 事件很方便。

使用调度还可以让我根据需要加载控制器代码,而不是在页面加载时一次全部加载。我通过这种方式将应用的启动时间缩短了一半。

您说您的应用不需要它,但我认为能够设置 historyUrl 并直接链接到页面将是其他用户的主要好处。

所以我想这一切都取决于应用程序是否有意义。

【讨论】:

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

以上是关于为啥我应该使用 Ext.dispatch 而不是直接调用控制器代码?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我应该使用 LoadBalancerProbe 而不是订阅 RoleEnvironment.StatusCheck 事件?

为啥我应该使用 CString 的 GetBuffer 成员而不是 SetAt?

Android:何时/为啥我应该使用 FrameLayout 而不是 Fragment?

为啥我应该使用 char 而不是 varchar? [复制]

为啥我应该使用 OkHttp 而不是 android httpClient 和 AsyncTask

为啥我应该在 AngularJS 中选择使用服务而不是工厂? [复制]