新手Javscripter在这里。我正在尝试对模块进行一些练习,但遇到了麻烦。我正在尝试获取controller
模块来以最小的成功访问wagerAmount
模块中的UIControl
(由用户输入)。我的相关代码如下:
var UIControl = (function() {
return {
getWager: function() {
return {
wagerAmount: document.getElementById('wager').value
};
}
};
})();
var controller = (function(UICont) {
var topics = ['sports', 'history', 'technology', 'music', 'movies'];
var wager = UICont.getWager();
var changeClass = function() {
document.getElementById('bet').addEventListener('click', function() {
console.log(wager);
for (var i = 0; i < topics.length; i++) {
if (document.getElementById(topics[i]).classList[1] == 'select') {
activateAnswers();
}
}
});
}
})(UIControl);
运行此命令时,console.log(wager)
打印一个空字符串{wagerAmount: ""}
。如果我在wager
函数中声明changeClass
,则会发生相同的情况。但是,如果我在click事件中声明了wager
,它将打印用户输入的数字。但点击事件可以很好地访问topics
中声明的controller
变量。这里的主要问题是,当我需要将功能添加到多个click事件中时,我将不得不在每个click事件中声明一个新变量以访问相同的函数,这听起来像是不好的做法。那么这是怎么回事?
答案 0 :(得分:0)
好吧,所以在昨晚花了几个小时试图解决这个问题之后,今天早上我在喝咖啡后很快想出了解决方案。万一有其他人遇到此问题,我将发布我的解决方案,如果其他人提出其他建议,他们也可以发布。
我没有在wager
中的任何地方声明controller
,而是在controller
内创建了一个新函数:
var retrieveWager = function() {
return {
wager: UICont.getWager().wagerAmount
};
}
,然后可以在任何这样的点击事件中访问它:
retrieveWager().wager;