рдПрдХреНрд╕рдЯреАрдЬреЗрдПрд╕ 7 рдФрд░ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ 2. рдПрдХ рдПрд╕рдкреАрдП рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХреИрд╕реЗ рдХрд░реЗрдВ рдЬреЛ рдЖрдкрдХреЗ рдПрдкреАрдЖрдИ рдФрд░ рдмрд╛рд╣рд░реА рд░рд┐рдПрдХреНрдЯрдЬрд╕ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рддрд╛ рд╣реИ?

рдПрдХреНрд╕рдЯреА рдЬреЗрдПрд╕ рдХреЗ рд╣рд╛рд▓ рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЖрдзреБрдирд┐рдХ рдЯреВрд▓рдХрд┐рдЯ, рдиреЗ рдлреНрд░реЗрдорд╡рд░реНрдХ (рдХрд┐рдЪрди рд╕рд┐рдВрдХ рдХреЗ рдЙрджрд╛рд╣рд░рдг) рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдорд╛ рдХреЛ рдХрдо рдХрд░ рджрд┐рдпрд╛, рд╡рд╛рдВрдЫрд┐рдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (рд╣рд╛рдп рд╕реНрдиреЗрдЪрд╛ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЯ) рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдФрд░ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ (рд╕реЗрдиреНрдорд╛ рдПрдордПрдордбреА) рдХрд╛ рдПрдХ рдиреНрдпреВрдирддрдо рдЖрдХрд╛рд░ рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ред

рд╢рд╛рдпрдж, рд╣реИрдмрд░ рдХреЛ рдПрдХ "рд╕реНрдерд┐рддрд┐ рдХреЗрдВрджреНрд░" рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдкрддрд▓рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд╣рд╛рдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рдЖрдк рдЙрдирд╕реЗ рдХреИрдорд░реЗ рдФрд░ рдШрдЯрдирд╛рдУрдВ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ (рд╕рднреА рдбреЗрдЯрд╛ рдирдХрд▓реА рд╣реИрдВ)ред



рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдЖрдЗрдП 2 рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ рдЬреЛ рдХреИрдорд░реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА, рдореМрдЬреВрджрд╛ рдШрдЯрдирд╛рдУрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдирдИ рдШрдЯрдирд╛рдУрдВ (рд╡реЗрдмрд╕реНрдХреЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рджреЗрдЧрд╛ред


рдЕрдЧрд▓рд╛, рдЖрд╡рд╢реНрдпрдХ рдореЙрдбрд▓, рднрдВрдбрд╛рд░, рд╡рд┐рдЪрд╛рд░ рдФрд░ рдмрд╛рд╣рд░реА рдирд┐рд░реНрднрд░рддрд╛ рдЬреЛрдбрд╝реЗрдВ:



рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ, рдирдХреНрд╢реЗ рдХреЗ рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рддреЗ рд╣реБрдП рдорд╛рдирдЪрд┐рддреНрд░ рджреГрд╢реНрдпред
Ext.define('Cameras.view.override.Map', { override: 'Cameras.view.Map', config: { cameras: {}, react: null }, initialize: function() { let that = this; let e = React.createElement; this.setReact(ReactDOM.render(e(createReactClass({ getInitialState: function() { return { items: [], center: [55.751574, 37.573856]}; }, render: function() { let placemarks = []; for(let i=0; i < this.state.items.length; i++) { let location = this.state.items[i].get("location"); placemarks.push(e(window.ReactYandexMaps.Placemark, { geometry: [location.latitude, location.longitude], options: { preset: 'islands#blueCircleDotIconWithCaption', iconCaptionMaxWidth: '50' } })); } let map = e(window.ReactYandexMaps.Map, { state: { center: this.state.center, zoom: 10 }, width: '100%', height: '100%' }, placemarks); return e(window.ReactYandexMaps.YMaps, null, map); } })), this.mapContainer.dom)); }, getElementConfig: function() { return { reference: 'element', className: 'x-container', children: [{ reference: 'bodyElement', style: 'width: 100%; height: 100%', className: 'x-inner', children: [{ style: 'width: 100%; height: 100%', reference: 'mapContainer', className: Ext.baseCSSPrefix + 'map-container' }] }] }; }, addCamera: function(cameraModel) { if(!this.containsCamera(cameraModel)) { this.getCameras()[cameraModel.get("id")] = cameraModel; this.getReact().setState({ items: Object.values(this.getCameras()) }); this.fitCamera(cameraModel); } }, removeCamera: function(cameraModel) { if(this.containsCamera(cameraModel)) { delete this.getCameras()[cameraModel.get("id")]; this.getReact().setState({ items: Object.values(this.getCameras()) }); } }, fitCamera: function(cameraModel) { if(this.containsCamera(cameraModel)) { let location = this.getCameras()[cameraModel.get("id")].get("location"); this.getReact().setState({ center: [location.latitude, location.longitude] }); } }, privates: { containsCamera: function(cameraModel) { cameraId = "" + cameraModel.get("id"); return Object.keys(this.getCameras()).includes(cameraId); } } }); 


рд╣рдо рдпрд╣ рднреА рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдИрд╡реЗрдВрдЯреНрд╕ рдХреИрдорд░рд╛рдЧреНрд░рд┐рдб рдШрдЯрдХ рд╕реЗ рдЖрдПрдВрдЧреЗ, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рд╡рд╣ рдШрдЯрдХ рд╣реИ рдЬреЛ рдХрд╛рд░реНрдб рд╕реЗ рдХреИрдорд░реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ / рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред

CameraGrid рдШрдЯрдХ рдирд┐рдпрдВрддреНрд░рдХ рдЬреЛ рдШрдЯрдХ рдореЗрдВ рдЗрд╡реЗрдВрдЯ рдЬрдирд░реЗрд╢рди рдЬреЛрдбрд╝рддрд╛ рд╣реИ
 Ext.define('Cameras.view.CamerasGridViewController', { extend: 'Ext.app.ViewController', alias: 'controller.camerasgrid', init: function() { let socket = new WebSocket("ws://localhost:8080/events/sub"); socket.onopen = function(e) { console.log('onopen'); }; socket.onmessage = this.onMessage.bind(this); }, onMessage: function(event) { let data = Ext.decode(event.data); let gridData = this.getView().getStore().getData(); for(let i=0; i < gridData.length; i++) { let checked = gridData.getAt(i).get("checked"); if(checked !== undefined && checked) { if(gridData.getAt(i).get("id") == data.camera.id) { this.fireViewEvent("cameraRecognition", data); } } } } }); 


рдкрд░рд┐рдгрд╛рдо рдПрдХ рдордиреЛрд░рдВрдЬрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИред рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ (рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдПрдХ) рдХреЗ рдЙрдЪрд┐рдд рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд╕рд╛рде, рдПрдХ рдмрдирд╛рдиреЗ рдХрд╛ рд╕рдордп рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд╣реИ, рдХреБрдЫ рдШрдВрдЯреЛрдВ рддрдХред



рдирдореВрдирд╛ рдХреЛрдб github.com рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИред

Source: https://habr.com/ru/post/hi479676/


All Articles