Using Frameworks with the ArcGIS API for...
Transcript of Using Frameworks with the ArcGIS API for...
![Page 1: Using Frameworks with the ArcGIS API for JavaScriptproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · Using Frameworks with the ArcGIS API for JavaScript René](https://reader031.fdocuments.in/reader031/viewer/2022012917/5bdbeaaa09d3f2bc1c8ce839/html5/thumbnails/1.jpg)
UsingFrameworkswiththeArcGISAPIforJavaScriptRenéRubalcava
@odoenet
![Page 2: Using Frameworks with the ArcGIS API for JavaScriptproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · Using Frameworks with the ArcGIS API for JavaScript René](https://reader031.fdocuments.in/reader031/viewer/2022012917/5bdbeaaa09d3f2bc1c8ce839/html5/thumbnails/2.jpg)
AgendaOptionsAngularEmberReactVueJSElm
![Page 3: Using Frameworks with the ArcGIS API for JavaScriptproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · Using Frameworks with the ArcGIS API for JavaScript René](https://reader031.fdocuments.in/reader031/viewer/2022012917/5bdbeaaa09d3f2bc1c8ce839/html5/thumbnails/3.jpg)
Options
![Page 4: Using Frameworks with the ArcGIS API for JavaScriptproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · Using Frameworks with the ArcGIS API for JavaScript René](https://reader031.fdocuments.in/reader031/viewer/2022012917/5bdbeaaa09d3f2bc1c8ce839/html5/thumbnails/4.jpg)
Optionsavailabletoyou
Builders
TemplatesConfigurableAppsApps
AppStudioWebAppBuilders
![Page 5: Using Frameworks with the ArcGIS API for JavaScriptproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · Using Frameworks with the ArcGIS API for JavaScript René](https://reader031.fdocuments.in/reader031/viewer/2022012917/5bdbeaaa09d3f2bc1c8ce839/html5/thumbnails/5.jpg)
TemplatesEasytouseConfigurableIntegrateswithPortal
![Page 6: Using Frameworks with the ArcGIS API for JavaScriptproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · Using Frameworks with the ArcGIS API for JavaScript René](https://reader031.fdocuments.in/reader031/viewer/2022012917/5bdbeaaa09d3f2bc1c8ce839/html5/thumbnails/6.jpg)
AppsPrebuiltwithspecificpurpose( , )Someprovideextensibility( )
Collector NavigatorOpsDashboard
![Page 7: Using Frameworks with the ArcGIS API for JavaScriptproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · Using Frameworks with the ArcGIS API for JavaScript René](https://reader031.fdocuments.in/reader031/viewer/2022012917/5bdbeaaa09d3f2bc1c8ce839/html5/thumbnails/7.jpg)
WebAppBuilderCanbethoughtofasitsownframeworkjimu-theLegoframework
![Page 8: Using Frameworks with the ArcGIS API for JavaScriptproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · Using Frameworks with the ArcGIS API for JavaScript René](https://reader031.fdocuments.in/reader031/viewer/2022012917/5bdbeaaa09d3f2bc1c8ce839/html5/thumbnails/8.jpg)
ArcGISJSAPIWidgetFramework
BasedonTypeScriptJSX
CustomWidgetDevelopmentMaquetteJS
![Page 9: Using Frameworks with the ArcGIS API for JavaScriptproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · Using Frameworks with the ArcGIS API for JavaScript René](https://reader031.fdocuments.in/reader031/viewer/2022012917/5bdbeaaa09d3f2bc1c8ce839/html5/thumbnails/9.jpg)
Whyuseaframework?SimplifyworkflowAllteamsonsamepage
![Page 10: Using Frameworks with the ArcGIS API for JavaScriptproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · Using Frameworks with the ArcGIS API for JavaScript René](https://reader031.fdocuments.in/reader031/viewer/2022012917/5bdbeaaa09d3f2bc1c8ce839/html5/thumbnails/10.jpg)
ChallengesJSAPIAMDLoaderMostissueswithloaderpluginsWehavesolutionsformosttooling!
define([ "dojo/has!webgl?esri/package1:esri/package2"], function(myDrawingPackage) {...});
![Page 11: Using Frameworks with the ArcGIS API for JavaScriptproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · Using Frameworks with the ArcGIS API for JavaScript René](https://reader031.fdocuments.in/reader031/viewer/2022012917/5bdbeaaa09d3f2bc1c8ce839/html5/thumbnails/11.jpg)
Angular
![Page 12: Using Frameworks with the ArcGIS API for JavaScriptproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · Using Frameworks with the ArcGIS API for JavaScript René](https://reader031.fdocuments.in/reader031/viewer/2022012917/5bdbeaaa09d3f2bc1c8ce839/html5/thumbnails/12.jpg)
FeaturesDirectivesareWebComponentsDependencyInjectionRxJSUsesTypeScript
SystemJS
![Page 13: Using Frameworks with the ArcGIS API for JavaScriptproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · Using Frameworks with the ArcGIS API for JavaScript René](https://reader031.fdocuments.in/reader031/viewer/2022012917/5bdbeaaa09d3f2bc1c8ce839/html5/thumbnails/13.jpg)
esri-system-js esriSystem.register( // array of Esri module names to load and then register with SystemJS [ 'esri/Map', 'esri/views/SceneView', 'esri/layers/FeatureLayer' ], // optional callback function function() { // then bootstrap application System.import('app/main') .then(null, console.error.bind(console)); });
github
![Page 14: Using Frameworks with the ArcGIS API for JavaScriptproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · Using Frameworks with the ArcGIS API for JavaScript René](https://reader031.fdocuments.in/reader031/viewer/2022012917/5bdbeaaa09d3f2bc1c8ce839/html5/thumbnails/14.jpg)
Componentimport { Component } from '@angular/core';
@Component({ selector: 'my-app', styles: [` section { width: 100%; margin: 0 auto; padding: 4em 0 0 0; } `], template: ` <main> <section> <esri-scene-view></esri-scene-view> </section> </main> `})export class AppComponent { }
![Page 15: Using Frameworks with the ArcGIS API for JavaScriptproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · Using Frameworks with the ArcGIS API for JavaScript René](https://reader031.fdocuments.in/reader031/viewer/2022012917/5bdbeaaa09d3f2bc1c8ce839/html5/thumbnails/15.jpg)
Injectableimport { Injectable } from "@angular/core";
import EsriMap from "esri/Map";
@Injectable()export class SimpleMapService { map: EsriMap; constructor() { this.map = new EsriMap({ basemap: "satellite", ground: "world-elevation" }); }}
![Page 16: Using Frameworks with the ArcGIS API for JavaScriptproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · Using Frameworks with the ArcGIS API for JavaScript René](https://reader031.fdocuments.in/reader031/viewer/2022012917/5bdbeaaa09d3f2bc1c8ce839/html5/thumbnails/16.jpg)
DependencyInjectionimport { Component, ElementRef, Input, Output, EventEmitter } from "@angular/core";import SceneView from "esri/views/SceneView";import { SimpleMapService } from "./map.services";
@Component({ selector: "esri-scene-view", template: `<div id="viewDiv" style="height:600px"><ng-content></ng-content></div>`, providers: [SimpleMapService]})export class EsriSceneViewComponent { @Output() viewCreated = new EventEmitter();
view: any = null;
constructor( private _mapService: SimpleMapService, private elRef: ElementRef ) {}
ngOnInit() { this.view = new SceneView({ container: this.elRef.nativeElement.firstChild, map: this._mapService.map, camera: {...}
![Page 17: Using Frameworks with the ArcGIS API for JavaScriptproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · Using Frameworks with the ArcGIS API for JavaScript René](https://reader031.fdocuments.in/reader031/viewer/2022012917/5bdbeaaa09d3f2bc1c8ce839/html5/thumbnails/17.jpg)
AngularLotsofiterationssinceannouncedStabilizing
![Page 18: Using Frameworks with the ArcGIS API for JavaScriptproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · Using Frameworks with the ArcGIS API for JavaScript René](https://reader031.fdocuments.in/reader031/viewer/2022012917/5bdbeaaa09d3f2bc1c8ce839/html5/thumbnails/18.jpg)
Ember
![Page 19: Using Frameworks with the ArcGIS API for JavaScriptproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · Using Frameworks with the ArcGIS API for JavaScript René](https://reader031.fdocuments.in/reader031/viewer/2022012917/5bdbeaaa09d3f2bc1c8ce839/html5/thumbnails/19.jpg)
FeaturesTheEmberWay
Emberwayorgetouttheway!FocusonWebComponents
Robustadd-onsystemGreatforteams!
ember-cli
![Page 20: Using Frameworks with the ArcGIS API for JavaScriptproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · Using Frameworks with the ArcGIS API for JavaScript René](https://reader031.fdocuments.in/reader031/viewer/2022012917/5bdbeaaa09d3f2bc1c8ce839/html5/thumbnails/20.jpg)
Weuseit!OperationsDashboardOpenDataWorkforceWebApp
![Page 21: Using Frameworks with the ArcGIS API for JavaScriptproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · Using Frameworks with the ArcGIS API for JavaScript René](https://reader031.fdocuments.in/reader031/viewer/2022012917/5bdbeaaa09d3f2bc1c8ce839/html5/thumbnails/21.jpg)
ChallengesUsesit'sownsynchronousAMD-likeloaderDoesn'tlikeRequireJSorDojoloaders
![Page 23: Using Frameworks with the ArcGIS API for JavaScriptproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · Using Frameworks with the ArcGIS API for JavaScript René](https://reader031.fdocuments.in/reader031/viewer/2022012917/5bdbeaaa09d3f2bc1c8ce839/html5/thumbnails/23.jpg)
Configureember install ember-cli-amdvar EmberApp = require('ember-cli/lib/broccoli/ember-app');module.exports = function(defaults) { var app = new EmberApp(defaults, { amd :{ loader: 'https://js.arcgis.com/4.3/', packages: [ 'esri','dojo','dojox','dijit', 'moment', 'dgrid', 'dstore' ] } }); return app.toTree();};
![Page 24: Using Frameworks with the ArcGIS API for JavaScriptproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · Using Frameworks with the ArcGIS API for JavaScript René](https://reader031.fdocuments.in/reader031/viewer/2022012917/5bdbeaaa09d3f2bc1c8ce839/html5/thumbnails/24.jpg)
MapasaServiceimport Ember from 'ember';import EsriMap from 'esri/Map';
export default Ember.Service.extend({ map: null,
loadMap() { let map = this.get('map'); if (map) { return map; } else { map = new EsriMap({ basemap: 'hybrid', ground: 'world-elevation' }); this.set('map', map); return map; } }});
![Page 25: Using Frameworks with the ArcGIS API for JavaScriptproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · Using Frameworks with the ArcGIS API for JavaScript René](https://reader031.fdocuments.in/reader031/viewer/2022012917/5bdbeaaa09d3f2bc1c8ce839/html5/thumbnails/25.jpg)
Componentimport Ember from 'ember';import SceneView from 'esri/views/SceneView';
export default Ember.Component.extend({
classNames: ['viewDiv'],
mapService: Ember.inject.service('map'),
didInsertElement() { let map = this.get('map'); if (!map) { map = this.get('mapService').loadMap(); this.set('map', map); } },
createMap: function() { let map = this.get('map'); let view = new SceneView({ map, container: this.elementId, center: [-101.17, 21.78], zoom: 10
![Page 26: Using Frameworks with the ArcGIS API for JavaScriptproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · Using Frameworks with the ArcGIS API for JavaScript René](https://reader031.fdocuments.in/reader031/viewer/2022012917/5bdbeaaa09d3f2bc1c8ce839/html5/thumbnails/26.jpg)
AddComponent
Magic
{{esri-map}}
![Page 28: Using Frameworks with the ArcGIS API for JavaScriptproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · Using Frameworks with the ArcGIS API for JavaScript René](https://reader031.fdocuments.in/reader031/viewer/2022012917/5bdbeaaa09d3f2bc1c8ce839/html5/thumbnails/28.jpg)
React
![Page 29: Using Frameworks with the ArcGIS API for JavaScriptproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · Using Frameworks with the ArcGIS API for JavaScript René](https://reader031.fdocuments.in/reader031/viewer/2022012917/5bdbeaaa09d3f2bc1c8ce839/html5/thumbnails/29.jpg)
FeaturesTechnically,notaframeworkReusable,composablecomponentsJSX-declarative
![Page 30: Using Frameworks with the ArcGIS API for JavaScriptproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · Using Frameworks with the ArcGIS API for JavaScript René](https://reader031.fdocuments.in/reader031/viewer/2022012917/5bdbeaaa09d3f2bc1c8ce839/html5/thumbnails/30.jpg)
Componentsclass Recenter extends React.Component<Props, State> { state = { x: 0, y: 0, interacting: false }; ... render() { let style: Style = { textShadow: this.state.interacting ? '-1px 0 red, 0 1px red, 1px 0 red, 0 -1px red' : '' }; let { x, y } = this.state; return ( <div className='recenter-tool' style={style} onClick={this.defaultCenter}> <p>x: {Number(x).toFixed(3)}</p> <p>y: {Number(y).toFixed(3)}</p> </div> ); }}
![Page 31: Using Frameworks with the ArcGIS API for JavaScriptproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · Using Frameworks with the ArcGIS API for JavaScript René](https://reader031.fdocuments.in/reader031/viewer/2022012917/5bdbeaaa09d3f2bc1c8ce839/html5/thumbnails/31.jpg)
Composeview.then(() => { ReactDOM.render( <div> <Recenter view={view} initialCenter={[-100.33, 25.69]} /> </div>, document.getElementById('appDiv') );}, (err: Error) => { console.warn('Error: ', err);});
![Page 32: Using Frameworks with the ArcGIS API for JavaScriptproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · Using Frameworks with the ArcGIS API for JavaScript René](https://reader031.fdocuments.in/reader031/viewer/2022012917/5bdbeaaa09d3f2bc1c8ce839/html5/thumbnails/32.jpg)
StateManagementforReact
-Reactcli
ReduxMobXCreateReactApp
![Page 33: Using Frameworks with the ArcGIS API for JavaScriptproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · Using Frameworks with the ArcGIS API for JavaScript René](https://reader031.fdocuments.in/reader031/viewer/2022012917/5bdbeaaa09d3f2bc1c8ce839/html5/thumbnails/33.jpg)
Canuseesri-loadercreateMap() { dojoRequire(['esri/Map', 'esri/views/MapView'], (Map, MapView) => { new MapView({ container: this.refs.mapView, map: new Map({basemap: 'topo'}) }) });}componentWillMount() { if (!isLoaded()) { bootstrap((err) => { if (err) { console.error(err) } this.createMap(); }, { url: 'https://js.arcgis.com/4.3/' }); } else { this.createMap(); }}
![Page 34: Using Frameworks with the ArcGIS API for JavaScriptproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · Using Frameworks with the ArcGIS API for JavaScript René](https://reader031.fdocuments.in/reader031/viewer/2022012917/5bdbeaaa09d3f2bc1c8ce839/html5/thumbnails/34.jpg)
ReactVerypopular,largecommunityHasonejobVarietyofwaysitcanbeused
![Page 35: Using Frameworks with the ArcGIS API for JavaScriptproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · Using Frameworks with the ArcGIS API for JavaScript René](https://reader031.fdocuments.in/reader031/viewer/2022012917/5bdbeaaa09d3f2bc1c8ce839/html5/thumbnails/35.jpg)
VueJS
![Page 36: Using Frameworks with the ArcGIS API for JavaScriptproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · Using Frameworks with the ArcGIS API for JavaScript René](https://reader031.fdocuments.in/reader031/viewer/2022012917/5bdbeaaa09d3f2bc1c8ce839/html5/thumbnails/36.jpg)
FeaturesNotaframework,butsosoniceBuildcomponentsSimpleSmall(under20kb)
![Page 37: Using Frameworks with the ArcGIS API for JavaScriptproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · Using Frameworks with the ArcGIS API for JavaScript René](https://reader031.fdocuments.in/reader031/viewer/2022012917/5bdbeaaa09d3f2bc1c8ce839/html5/thumbnails/37.jpg)
EasytointegrateVue.component("camera-info", { props: ["camera"], template: "<div>" + "<h2>Camera Details</h2>" + "<p><strong>Heading</strong>: {{ camera.heading.toFixed(3) }}</p>" + "<p><strong>Tilt</strong>: {{ camera.tilt.toFixed(3) }}</p>" + "<p><strong>Latitude</strong>: {{ camera.position.latitude.toFixed(2) }}</p>" + "<p><strong>Longitude</strong>: {{ camera.position.longitude.toFixed(2) }}</p>" + "</div>"});view.then(function() { var info = new Vue({ el: "#info", data: { camera: view.camera } }); view.ui.add(info.$el, "top-right"); view.watch("camera", function() { info.camera = view.camera; });});
![Page 38: Using Frameworks with the ArcGIS API for JavaScriptproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · Using Frameworks with the ArcGIS API for JavaScript René](https://reader031.fdocuments.in/reader031/viewer/2022012917/5bdbeaaa09d3f2bc1c8ce839/html5/thumbnails/38.jpg)
Hasacli!Usestemplates!
<template> ... <div id="viewDiv"></div> ...</template>
![Page 39: Using Frameworks with the ArcGIS API for JavaScriptproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · Using Frameworks with the ArcGIS API for JavaScript René](https://reader031.fdocuments.in/reader031/viewer/2022012917/5bdbeaaa09d3f2bc1c8ce839/html5/thumbnails/39.jpg)
Canuseesri-loaderimport * as esriLoader from 'esri-loader'export default { ... mounted () { const createMap = () => { esriLoader.dojoRequire([ 'esri/Map', 'esri/views/SceneView', 'esri/core/watchUtils' ], (EsriMap, SceneView, watchUtils) => { ... return view }) } ... }, ...}
vue-clidemo
![Page 40: Using Frameworks with the ArcGIS API for JavaScriptproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · Using Frameworks with the ArcGIS API for JavaScript René](https://reader031.fdocuments.in/reader031/viewer/2022012917/5bdbeaaa09d3f2bc1c8ce839/html5/thumbnails/40.jpg)
Elm
![Page 41: Using Frameworks with the ArcGIS API for JavaScriptproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · Using Frameworks with the ArcGIS API for JavaScript René](https://reader031.fdocuments.in/reader031/viewer/2022012917/5bdbeaaa09d3f2bc1c8ce839/html5/thumbnails/41.jpg)
FeaturesPurelyFunctionalLanguageAlsoaFrameworkCrazyrightStaticallytypeddescribetheshapeofyourvalue
![Page 42: Using Frameworks with the ArcGIS API for JavaScriptproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · Using Frameworks with the ArcGIS API for JavaScript René](https://reader031.fdocuments.in/reader031/viewer/2022012917/5bdbeaaa09d3f2bc1c8ce839/html5/thumbnails/42.jpg)
ElmArchitectureModel—thestateofyourapplicationUpdate—awaytoupdateyourstateView—awaytoviewyourstateasHTML
![Page 43: Using Frameworks with the ArcGIS API for JavaScriptproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · Using Frameworks with the ArcGIS API for JavaScript René](https://reader031.fdocuments.in/reader031/viewer/2022012917/5bdbeaaa09d3f2bc1c8ce839/html5/thumbnails/43.jpg)
Modeltype alias Model = { items : List Card }
type alias Card = { id : String , title : String , thumbnailUrl : Maybe String , itemUrl : String , snippet : Maybe String , selected : Bool }
![Page 44: Using Frameworks with the ArcGIS API for JavaScriptproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · Using Frameworks with the ArcGIS API for JavaScript René](https://reader031.fdocuments.in/reader031/viewer/2022012917/5bdbeaaa09d3f2bc1c8ce839/html5/thumbnails/44.jpg)
Updatetype Msg = Select String | UpdateSave String Int | Change Model
update : Msg -> Model -> ( Model, Cmd Msg )update msg model = case msg of Change newItems -> ( newItems, Cmd.none )
UpdateSave itemid rating -> model ! [] |> andThen update (Select itemid) ...
![Page 45: Using Frameworks with the ArcGIS API for JavaScriptproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · Using Frameworks with the ArcGIS API for JavaScript René](https://reader031.fdocuments.in/reader031/viewer/2022012917/5bdbeaaa09d3f2bc1c8ce839/html5/thumbnails/45.jpg)
UpdateSelect itemid -> let selected t = if t.id == itemid then { t | selected = True } else { t | selected = False }
findCard itemid = let valid val = case val of Nothing -> sampleCard
Just val -> val
card = model.items |> List.filter (\x -> x.id == itemid) |> List.head in valid card
![Page 46: Using Frameworks with the ArcGIS API for JavaScriptproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · Using Frameworks with the ArcGIS API for JavaScript René](https://reader031.fdocuments.in/reader031/viewer/2022012917/5bdbeaaa09d3f2bc1c8ce839/html5/thumbnails/46.jpg)
ViewviewCard : Card -> Html MsgviewCard card = ... div [ class cardStyle ] [ figure [ class "card-image-wrap" ] [ img [ class "card-image" , card.thumbnailUrl |> showVal |> src ] [] , div [ class "card-image-caption" ] [ text card.title ] ] , div [ class "card-content" ] [ card.snippet |> showVal |> text , div [ class "btn btn-fill leader-1" , onClick (Select card.id) ]
![Page 47: Using Frameworks with the ArcGIS API for JavaScriptproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · Using Frameworks with the ArcGIS API for JavaScript René](https://reader031.fdocuments.in/reader031/viewer/2022012917/5bdbeaaa09d3f2bc1c8ce839/html5/thumbnails/47.jpg)
Lookingforward
![Page 49: Using Frameworks with the ArcGIS API for JavaScriptproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · Using Frameworks with the ArcGIS API for JavaScript René](https://reader031.fdocuments.in/reader031/viewer/2022012917/5bdbeaaa09d3f2bc1c8ce839/html5/thumbnails/49.jpg)
TypeScript2.2introduced and object typeFutureupdates
mixins
![Page 50: Using Frameworks with the ArcGIS API for JavaScriptproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · Using Frameworks with the ArcGIS API for JavaScript René](https://reader031.fdocuments.in/reader031/viewer/2022012917/5bdbeaaa09d3f2bc1c8ce839/html5/thumbnails/50.jpg)
NotableMentions
-hyperscriptRiotMithrilCycle
![Page 51: Using Frameworks with the ArcGIS API for JavaScriptproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · Using Frameworks with the ArcGIS API for JavaScript René](https://reader031.fdocuments.in/reader031/viewer/2022012917/5bdbeaaa09d3f2bc1c8ce839/html5/thumbnails/51.jpg)
Questions?Helpustoimprovefillingoutthesurvey
ReneRubalcava( )
Slides:
@odoenet
github.com/odoe/presentations/2017-devsummit-ps-using-frameworks/
![Page 52: Using Frameworks with the ArcGIS API for JavaScriptproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · Using Frameworks with the ArcGIS API for JavaScript René](https://reader031.fdocuments.in/reader031/viewer/2022012917/5bdbeaaa09d3f2bc1c8ce839/html5/thumbnails/52.jpg)