Dojo AMD模块更改“ this”的引用

肖恩

对于尝试学习AMD风格的Dojo时遇到的某些行为,我确实感到困惑。当我实例化模块/对象时,“ this”是指构造函数中的对象。我对内部函数进行了调用,该内部函数中的“ this”是指Window对象。因此,当我访问this.attachMapEventHandlers时,出现“对象[对象全局]没有方法'attachMapEventHandlers'”错误。我究竟做错了什么?更新:我找到了lang.hitch,这似乎表明异步本质是让我绊倒的原因,但是我对如何实现解决方案感到困惑。

我在index.html中的脚本:

require(["javascript/layout", "dijit/layout/ContentPane", "dijit/layout/BorderContainer", "dijit/layout/AccordionContainer", 
        "dojo/dom", "dojo/dom-attr", "dijit/Toolbar", "dijit/form/Button", "dijit/Dialog","dijit/ProgressBar", "dojo/domReady!"],
        function (layout, dom, domAttr) {
            mapControl = new layout();

layout.js:

define(["dojo/_base/declare"], function(declare) {
return declare(null, {
    action:"pan",
    activeMeasureTool:"",
    aerialLayer:"",
    legendLayers:"",
    loadedServices:"",
    popup:"",
    resizeId:0,
    constructor: function() {
        this.init();
    },
    init: function() {
        require(["esri/map", "esri/config", "esri/SpatialReference", "esri/geometry/Extent"], 
            function(Map, config, SpatialReference, Extent) {
            //custom map requires a proxy to function properly.
            esri.config.defaults.io.proxyUrl = "../sdc_devdata/proxy.php";

            var spatRef = new SpatialReference(2276);

            var startExtent = new Extent(2481416.32087491, 6963246.42495962, 2501196.36936991, 6980267.92469462, spatRef);
            var appFullExtent = new Extent(2396699.46935379, 6872369.60195443, 2607745.94404633, 7107335.22319087, spatRef);

            map = new Map("map", {extent: startExtent, isZoomSlider:true, logo:false, sliderStyle:"large"});
            this.attachMapEventHandlers();
            this.createLayers();
            this.handleLayerVisibilityChange();
        });
    },
赵恩

您可以将'this'放在另一个变量中,例如_this,并在内部函数中使用_this

init: function() {
         var _this= this;
        require(["esri/map", "esri/config", "esri/SpatialReference", "esri/geometry/Extent"], 
            function(Map, config, SpatialReference, Extent) {
            ...
            _this.attachMapEventHandlers();
            _this.createLayers();
            _this.handleLayerVisibilityChange(); 

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从Dojo层加载AMD模块

来自分类Dev

如何从Dojo层加载AMD模块

来自分类Dev

如何在Dojo AMD中包括旧模块

来自分类Dev

TheIntern测试框架下加载Dojo AMD模块失败

来自分类Dev

在Dojo中交换AMD模块依赖性

来自分类Dev

Dojo / AMD模块ID区分大小写

来自分类Dev

Dojo AMD 未加载自定义模块

来自分类Dev

捆绑销售的Dojo模块

来自分类Dev

更改dojo dijit的文本

来自分类Dev

Xpages-使用Dojo模块

来自分类Dev

Dojo:覆盖预加载的模块

来自分类Dev

Dojo:覆盖预加载的模块

来自分类Dev

大多数Dojo模块都需要dojo / domReady吗?

来自分类Dev

DOJO排序更改列的宽度

来自分类Dev

DOJO排序更改列的宽度

来自分类Dev

如何在初始功能之外以适当的AMD方式使用自定义Dojo模块?

来自分类Dev

如何在 dojo2 应用程序中加载 AMD 模块

来自分类Dev

在 GridX 树周围使用 dojo 方面时对“this”的引用丢失

来自分类Dev

dojo amd load jquery undefined不是函数

来自分类Dev

dojo AMD加载顺序是什么?

来自分类Dev

在Dojo> = 1.7(AMD)中使用dojox Uploader

来自分类Dev

一般的Dojo模块加载

来自分类Dev

无法在另一个启用了dojo的页面中包含/引用一个启用了dojo的页面

来自分类Dev

在Dojo中以编程方式更改按钮文本

来自分类Dev

在Dojo日历中动态更改DateInterval

来自分类Dev

更改订单分页选项dojo

来自分类Dev

有人可以向我解释Dojo的“ dojo / on”模块中到底发生了什么吗?

来自分类Dev

Dojo:在事件侦听器回调中维护对窗口小部件的引用

来自分类Dev

使用AMD模块时,避免在Typescript中重复引用/导入外部javascript库