首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ExtJS如何在单个控制器中有效地存储多个函数的通用值

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

Stack Overflow用户
提问于 2018-07-27 00:23:59
回答 1查看 21关注 0票数 0

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

代码语言:javascript
复制
listener1: function(data1) {
    button1.setDisabled(data1.status = ProcessStatus.running);
    button2.setDisabled(data1.status = ProcessStatus.running);
}

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

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

代码语言:javascript
复制
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*方法?我应该将这些数据存储在哪里?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-27 05:21:06

有两种主要的可能性:可以直接将状态存储在控制器中,或者使用闭包来创建一个“私有”变量,并且不将其公开给任何东西,除了接口的getter/setter函数。

控制器有一个init方法,您可以将其用于闭包:

代码语言:javascript
复制
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)
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51543491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档