在视图中我有4个按钮。在控制器中,我引用了这些按钮。有启用/禁用每个按钮的复杂逻辑,不幸的是分散在几个函数事件侦听器中。每个监听器都有不同的参数。示例:
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*
方法?我应该将这些数据存储在哪里?
发布于 2018-07-27 05:21:06
有两种主要的可能性:可以直接将状态存储在控制器中,或者使用闭包来创建一个“私有”变量,并且不将其公开给任何东西,除了接口的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)
}
}
https://stackoverflow.com/questions/51543491
复制相似问题