【发布时间】:2015-09-15 14:53:01
【问题描述】:
我是使用 ExtJS 4 和 MVC 的新手。我有两个班级,ClassA 和 ClassB。从ClassB 我需要访问ClassA 及其属性。
我使用Ext.require 以便在ClassB 上加载ClassA,但我不知道我是否正确以及如何使用它。
提前感谢有人可以给我的任何帮助
A类
Ext.define('App.view.ClassA', {
extend: 'Ext.panel.Panel',
layout: 'fit',
alias: 'widget.mappanel',
html: "<div id='test-map'></div>",
listeners: {
afterrender: function () {
var osm_source = new ol.source.OSM({
url: 'http://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png'
});
var osmLayer = new ol.layer.Tile({
source: osm_source
});
window.app = {};
var app = window.app;
app.Drag = function () {
ol.interaction.Pointer.call(this, {
handleDownEvent: app.Drag.prototype.handleDownEvent
});
this.coordinate_ = null;
this.cursor_ = 'pointer';
this.feature_ = null;
this.previousCursor_ = undefined;
};
ol.inherits(app.Drag, ol.interaction.Pointer);
app.Drag.prototype.handleDownEvent = function (evt) {
var map = evt.map;
var feature = map.forEachFeatureAtPixel(evt.pixel,
function (feature, layer) {
return feature;
});
if (feature) {
this.coordinate_ = evt.coordinate;
this.feature_ = feature;
}
console.log("handleDownEvent" + evt.coordinate);
return !!feature;
};
this.map = new ol.Map({
target: 'test-map',
renderer: 'canvas',
interactions: ol.interaction.defaults().extend([new app.Drag()]),
layers: [osmLayer,
new ol.layer.Vector({
source: new ol.source.Vector({
features: [new ol.Feature(new ol.geom.Point([0, 0]))]
}),
style: new ol.style.Style({
image: new ol.style.Icon( ({
anchor: [0.5, 46],
anchorXUnits: 'fraction',
anchorYUnits: 'pixels',
opacity: 0.95,
src: 'resources/images/location_marker.png'
})),
stroke: new ol.style.Stroke({
width: 3,
color: [255, 0, 0, 1]
}),
fill: new ol.style.Fill({
color: [0, 0, 255, 0.6]
})
})
})
],
view: new ol.View({
center:ol.proj.transform([-74.085491, 4.676015], 'EPSG:4326', 'EPSG:3857'),
zoom: 6
})
});
},
}
});
B类
Ext.require([
'App.view.ClassB'
]);
Ext.define('App.view.menu.ClassA', {
extend: 'Ext.form.Panel',
alias: 'widget.classA',
width: 400,
bodyPadding: 10,
frame: true,
renderTo: Ext.getBody(),
items: [
{
xtype: 'panel',
layout: 'column',
frame: false,
border: false,
items: [
{
html: '<b><i>Click on map</i></b><b>',
frame: false,
border: false
},
{
xtype: 'image',
id: 'locatedDepotByClick',
src: 'resources/images/locate_point.png',
height: 26,
width: 26,
mode: 'image',
listeners: {el: {click: function () {
// I want to use ClassB here
setDepotFromMapMode();
}
}
},
margin: "0 10 2 2"
}]
}]
});
var clickMapActive = false;
function setDepotFromMapMode() {
if (clickMapActive) {
clickMapActive = false;
Ext.getCmp('locatedDepotByClick').setSrc('resources/images/locate_point_active.png');
} else {
clickMapActive = true;
Ext.getCmp('locatedDepotByClick').setSrc('resources/images/locate_point_deactive.png');
}
}
【问题讨论】:
-
能否请您发布您的代码?
-
完成! @AleksanderLidtke :)
-
谢谢,尽可能多地发布信息(不过量)确实会增加您获得帮助的机会。
-
感谢您的建议;)
-
在您的示例中,MVC 模式中没有任何内容
标签: javascript extjs extjs4 sencha-touch sencha-architect