gpt4 book ai didi

extjs - 新Ext.app.EventDomain的使用和功能

转载 作者:行者123 更新时间:2023-12-01 09:01:58 24 4
gpt4 key购买 nike

我们有大量的应用程序,它们都共享一些部分(数据/后端/前端)。用户可能有权访问一个或多个应用程序,当前用户需要一一加载它们。我们的客户不喜欢这样,所以我们现在将所有内容重构为一个巨大的应用程序,在该应用程序中,客户端自己解决要加载的模块。第一次测试看起来不错,由于我们的自定义模块构建器工具,加载时间是最短的。

现在我偶然发现了新的 Ext.app.EventDomain 并想知道我们是否应该在重构中实现它,因为一个棘手的部分是事件。我们也有考虑在表上使用路由。但这场辩论仍在继续。

那么我们应该使用 Ext.app.EventDomain 吗?如果是,它是如何使用的,或者我们应该更好地使用自定义路由?

我的意思是 Sencha Touch 使用路由但没有 EventBus,我会说 Sencha Touch 对性能至关重要,所以这两个框架在这里不同似乎是有原因的?

最佳答案

Ext.app.EventDomain 不打算用于本身;相反,如果需要,您可以实现自定义事件域。事件域背后的想法非常简单:它是一种在碰巧不是 Ext.Component 派生的应用程序部分之间传递事件的方法。

最常使用的是Controller绑定(bind):在4.1中只能直接调用其他Controller的方法(硬绑定(bind)),这对测试非常不利。在 4.2 中,您可以让 Controller 监听其他 Controller 的事件(软绑定(bind))并具有清晰的逻辑分离,因此可以:

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

doSomething: function() {
this.getController('Bar').doSomethingElse();
}
});

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

doSomethingElse: function() {
// The problem here is that this logic belongs to Bar controller
// but this method has to be called from Foo controller,
// which means Bar should always be around whenever Foo
// needs to call it. Race conditions, anyone?
...
}
});

你可以这样做:

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

doSomething: function() {
this.fireEvent('doSomethingElse');
}
});

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

init: function() {
this.listen({
controller: {
'*': { // '*' means any controller
doSomethingElse: this.doSomethingElse
}
}
});
},

doSomethingElse: function() {
// Not a problem anymore -- Foo fires an event, and if Bar
// happens to be around, it reacts and does whatever it wants;
// the benefit is that there is no direct method calling
// so we don't have to watch for exceptions and do other
// unnecessary stuff.
...
}
});

也可以监听自己的事件——这不是你可能在生产中使用的东西,但它是一个很好的副作用,可以非常成功地用于 Controller 单元测试。

除了其他 Controller 的事件之外,Controller 现在可以监听 Store、Direct 提供程序和全局事件,这有时可能很有用。

我计划在 4.2 发布时写下这个;希望在此之前这会有所帮助。

关于extjs - 新Ext.app.EventDomain的使用和功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15358010/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com