Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ExtJS如何在单个控制器中有效地存储多个函数的公共值_Extjs_Extjs5 - Fatal编程技术网

ExtJS如何在单个控制器中有效地存储多个函数的公共值

ExtJS如何在单个控制器中有效地存储多个函数的公共值,extjs,extjs5,Extjs,Extjs5,在视图中,我有4个按钮。在控制器中,我引用了这些按钮。启用/禁用每个按钮有复杂的逻辑,不幸的是,这些按钮分散在几个函数事件侦听器中。每个侦听器都有不同的参数。例如: listener1: function(data1) { button1.setDisabled(data1.status = ProcessStatus.running); button2.setDisabled(data1.status = ProcessStatus.running); } listener2

在视图中,我有4个按钮。在控制器中,我引用了这些按钮。启用/禁用每个按钮有复杂的逻辑,不幸的是,这些按钮分散在几个函数事件侦听器中。每个侦听器都有不同的参数。例如:

listener1: function(data1) {
    button1.setDisabled(data1.status = ProcessStatus.running);
    button2.setDisabled(data1.status = ProcessStatus.running);
}

listener2: function(upload) {
    button2.setDisabled(!upload.enabled);
}
我想重构代码:在controller
updateButtonState
中创建单个函数。然后,每个侦听器将在某个位置设置一个值,并在不带参数的情况下调用
updateButtonState()

listener2: function(upload) {
    saveUploadEnabled(upload.enabled);
    updateButtonsState();
    button2.setDisabled(!upload.enabled);
}

updateButtonsState: function() {
    var uploadEnabled = loadUploadEnabled();
    var data1StatusProcessRunning = loadData1Status();
    button1.setDisabled(data1StatusProcessRunning);
    button2.setDisabled(uploadEnabled || data1StatusProcessRunning);
}

如何实现
save*
load*
方法?我应该将这些数据存储在哪里?

有两种主要的可能性:您可以将状态直接存储在控制器中,或者使用闭包创建“私有”变量,并且不将其公开给除作为接口的getter/setter函数之外的任何对象

控制器具有可用于关闭的方法:

init: function(application) {
    var myPrivateVariable = {};
    this.saveUploadEnabled = function(uploadEnabled) {
         myPrivateVariable.uploadEnabled = uploadEnabled;
    }
    this.saveStatus = function(status) {
         myPrivateVariable.status = status;
    }
    this.updateButtonState = function() {
        button1.setDisabled(myPrivateVariable.status == ProcessStatus.Running || !myPrivateVariable.uploadEnabled)
    }
}
你能创建一个新的目标并清楚地解释你的目标吗?