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

ExtJS how to effetively store values common for several functions in a single controller

在视图中我有 4 个按钮。在控制器中,我引用了这些按钮。 enable/disable 每个按钮都有复杂的逻辑,不幸的是分散在几个功能 - 事件监听器中。每个侦听器都有不同的参数。示例:

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

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

我想重构代码:在控制器中创建单个函数 updateButtonsState。然后每个侦听器将在某处设置一个值并调用 updateButtonsState() 不带参数。

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*方法?我应该在哪里存储这些数据?

两种主要的可能性:您可以将状态直接存储在控制器中,或者使用闭包创建一个 "private" 变量并且不将其暴露给任何东西,除了作为您接口的 getter/setter 函数.

控制器有一个 init 方法可用于关闭:

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)
    }
}