【发布时间】:2014-06-17 06:46:50
【问题描述】:
我对 AMD 和 require.js 非常陌生,并且几乎一天多来一直在努力解决一个小问题。我尝试了不同的方法,但不确定什么是正确的方法/正确的方法。我会感谢所有 JavaScript 专家的反馈。
我正在尝试为将侦听任何输入/更改的文本框实现事件处理程序。在事件处理程序中,我想更新当前显示在地图上的标记。因此,我定义了两个模块 - 为 openlayers 开放,一个包含用于显示地图、更新标记等的自定义代码。
自定义模块如下所示:
define('mymodule', [ 'open-layers', 'jquery', 'openstreetmaps','t5/core/console' ], function(
openLayers, $,openStreetMaps ,console) {
var init = function() {
}
var listenForChange = function(clientId) {
clientId = clientId;
var textBox = $(document.getElementById(clientId));
console.debug(textBox);
$('#addressLineTwo').on('change paste keypress input', function() {
console.debug(textBox);
console.debug('OnChange');
console.debug($(this));
console.debug($(textBox).val());
openstreetmaps.clearMarkersAndShowAddress();
});
}
return {
init: init,
listenForChange: listenForChange
};
});
问题是,当事件处理程序因文本字段中的输入而被调用时,定义为“on”方法处理程序的函数中的openstreetmaps 变量是undefined。
我能解决这个问题的唯一方法就是将该行更改为这样的:
require(['openstreetmaps'], function(openstreetmaps) { openstreetmaps.clearMarkersAndShowAddress(newAddress);});
另外,如果我使用这样的构造,我如何管理变量并在所有这些闭包之间传递数据?似乎内部闭包无法访问外部闭包或函数中的变量。
非常感谢您的帮助和反馈。
【问题讨论】:
标签: javascript jquery requirejs openstreetmap js-amd