Extjs6自定义js事件

Extjs6自定义js事件,extjs,extjs6,extjs6-classic,Extjs,Extjs6,Extjs6 Classic,我有以下流程:在应用程序启动之前,我想检查服务器上的一些东西。根据答复,我想做出决定。我创建了一个实用程序类,它包装了我的js事件和一个应用程序控制器 下面是应用程序控制器: Ext.define('MyApp.controller.AppController', { extend: 'Ext.app.Controller', appEventDispatcher:function (){ // Create a dummy DOM element

我有以下流程:在应用程序启动之前,我想检查服务器上的一些东西。根据答复,我想做出决定。我创建了一个实用程序类,它包装了我的js事件和一个应用程序控制器

下面是应用程序控制器:

Ext.define('MyApp.controller.AppController', {
    extend: 'Ext.app.Controller',
    appEventDispatcher:function (){
      // Create a dummy DOM element 
        var dummy = document.createTextNode('');

        // Create custom wrappers with nicer names
        this.off = dummy.removeEventListener.bind(dummy);
        this.on = dummy.addEventListener.bind(dummy);
        this.trigger = function(eventName, data){
            if( !eventName ) return;
            var e = new CustomEvent(eventName, {"detail":data});
            dummy.dispatchEvent(e);
        }
    }
 });
和我的实用程序类:

Ext.define('MyApp.util.Util', {

    statics : {
        checkSomethingOnServer: function(customEvent){
            var store = Ext.StoreManager.lookup('appStore');
            store.load({
                scope: this,
                callback: function(records, operation, success){
                    if (success === true){
                        customEvent.trigger('success', true);
                    if (success === false)
                        debugger;
                        customEvent.trigger('fail', true);   
                    }
                }
            });
        }

    }
});
我使用实用程序类加载一个存储。在回调方法中,我触发自定义事件。此事件在app.js文件中处理

代码在fiddle中工作,也使用appwatch,当我想要构建代码时,出现了一些错误(语法错误)

我还创建了一个


如何在ExtJS中创建自定义事件以及如何使用它?我需要与js事件相同的行为,但需要Extjs实现。

在Extjs中,您只需使用自定义事件的名称将事件侦听器附加到存储:

store.on('myownevent', function(success) {
    console.log(success);
});
您的代码可能会继续并以该名称在商店上引发事件:

store.load({
    scope: this,
    callback: function(records, operation, success){
        store.fireEvent('myownevent', success);
    }
});
如果没有附加该事件的侦听器,则不会发生任何事情;如果附加了一个或多个侦听器,则它们将按照优先级顺序执行,对于那些具有相同优先级的侦听器,则按照添加它们的顺序执行


如果我有一个简单的Ext.Ajax请求而不是存储加载?对于store,我可以使用例如StoreManger来获取对它的引用,并附加listener,但如何使用ajax实现这一点?您始终可以将事件附加到
Ext.ajax
,因为它混合在
Ext.ajax
中。但是,我不推荐这样做,因为Ext.Ajax是单例的。然而,这似乎是一个问题。您想要实现什么?在fiddle中,我更改了代码,以便使用ajax而不是store。我在代码中添加了一些注释来描述我想做什么(这是一个更切题的问题)。总而言之,我想了解如何创建自定义事件,以及如何使用它们是我一直在寻找的。您之前的评论帮助我朝着正确的方向搜索。很高兴您找到了您搜索的内容,但是,这看起来不是好代码。在ExtJS中,应该将事件绑定到需要抛出事件的对象。例如,如果对存储进行排序,则存储将抛出
onsort
事件。如果某个formfield启动Ajax请求,则form字段应引发该事件。等等这就是我所说的“XY问题”。