2016-11-08 4 views
0

ASP.Net MVCプラットフォームでDojoを活用しようとしています。私はASP.Net MVCでDojoを使用する際の問題

(function() { 
'use strict'; 
var pathRX = new RegExp(/\/[^\/]+$/), locationPath = location.pathname.replace(pathRX, ''); 
require({ 
    async: true, 
    aliases: [ ['text', 'dojo/text']], 
    packages: [{ 
     name: 'MapCoctent', 
     location: locationPath + '../Map/MapCoctent' 
    }, { 
     name: 'MapServices', 
     location: locationPath + '../Map/MapServices' 
    }, { 
     name: 'Map', 
     location: locationPath + '../Map', 
     main: 'map' 
    }] 
}, ['Map']); 
})(); 

を持っているとmap.jsに私は

require([ 
'MapCoctent/appcontroller', 
'MapServices/mapservices', 
'dojo/domReady!' 
], function (AppCtrl, mapServices) { 
    'use strict'; 
    var appCtrl = new AppCtrl({ 
    elem: 'map-div', 
    mapOptions: { 
    basemap: 'streets', 
    center: [-123.141608, 49.245291], 
    zoom: 12, 
    autoResize: false 
} 
}); 
    appCtrl.load(); 
}); 

を持っているし、最終的にmapservices.jsに私は

を持ってconfig.jsの中

@{ 
    ViewBag.Title = "Home Page"; 
} 
<link rel="stylesheet" href="http://js.arcgis.com/3.18/dijit/themes/nihilo/nihilo.css"> 
<link rel='stylesheet' href='http://js.arcgis.com/3.18/esri/css/esri.css' /> 
<script src="http://js.arcgis.com/3.18"></script> 
<script src="~/Map/config.js"></script> 
<div class="container"> 
    <a role="button" id="lib" class="btn btn-default">Add Libraries</a> 
    <a role="button" id="sch" class="btn btn-default">Add Schools</a> 
    <div class="col-md-12" id="map-div"></div> 
</div> 

を持つインデックス()ビュー内

define(["esri/geometry/Geometry", 
    "esri/geometry/Point", 
    "esri/graphic", 
    "esri/symbols/SimpleMarkerSymbol", 
    "esri/symbols/SimpleFillSymbol", 
    "esri/Color", 
    "dojo/on", 
    "dojo/dom" 
], function (Geometry, Point, Graphic, SimpleMarkerSymbol, SimpleFillSymbol, Color, on, dom) { 
     on(dom.byId("sch"), "click", function() { 
     var point = new Point(-123.141608, 49.245291); 
     var markerSymbol = new SimpleMarkerSymbol(); 
     markerSymbol.setStyle(SimpleMarkerSymbol.STYLE_SQUARE); 
     markerSymbol.setSize(12); 
     markerSymbol.setColor(new Color([255, 0, 0])); 
     var pointGraphic = new Graphic(point, markerSymbol); 
     map.graphics.add(pointGraphic); 
    }); 
}); 

appcontroller.js私は

define([ 
'dojo/_base/declare', 
'esri/map' 
], function (declare, Map) { 
return declare(null, { 
    map: null, 
    options: {}, 
    constructor: function (options) { 
     this.options = options; 
    }, 
    load: function() { 
     this.map = new Map(this.options.elem, this.options.mapOptions); 
    } 
}); 
}); 

を持っていますが、私は上のクリックしたときに、私はこのエラーを取得しています学校の追加]ボタンを

TypeError: map.graphics is undefined

あなたは私が私が間違っているのかを知るせてくださいすることができますエラーと理由マップまだ定義されていませんが、すでにページ上でインスタンス化されていますか?

答えて

0

それは(のみappcontroller.jsからアクセス可能)他のモジュールアクセス可能な形式ではありませんので、あなたのマップオブジェクトは、グローバル変数ではありません

それは、他の上でアクセス可能になり、それgolbal変数作ってみますモジュール(jsファイル)

var map ; // declare global var here 
define([ 
'dojo/_base/declare', 
'esri/map' 
], function (declare, Map) { 
return declare(null, { 
    //map: null, useless ! 
    options: {}, 
    constructor: function (options) { 
     this.options = options; 
    }, 
    load: function() { 
     map = new Map(this.options.elem, this.options.mapOptions); 
    } 
}); 
}); 
関連する問題