
ExtJS 5ã¯ããã€ãã®ãšããµã€ãã£ã³ã°ãªã¢ãŒããã¯ãã£ã®æ¹åããããããŸããMVCã¢ããªã±ãŒã·ã§ã³ã匷åããããã«ãViewModelãMVVMãããã³ViewControllerã®ãµããŒããè¿œå ããŸããã æè¯ã®éšåã¯ããããã®é¢æ°ãçžäºã«æä»çã§ã¯ãªãããã段éçã«å
¥åããããåæã«äœ¿çšã§ããããšã§ãã
ã³ã³ãããŒã©ãŒã«ã€ããŠ
ExtJS 4ã§ã¯ãã³ã³ãããŒã©ãŒã¯
Ext.app.Controller
ããç¶æ¿ãããã¯ã©ã¹
Ext.app.Controller
ã ãããã®ã³ã³ãããŒã©ãŒã¯ãCSSã®ãããªã»ã¬ã¯ã¿ãŒïŒãã³ã³ããŒãã³ãã¯ãšãªããšåŒã°ããïŒã䜿çšããŠãã³ã³ããŒãã³ããšãã®ã€ãã³ããã³ãã©ãŒããããã³ã°ããŸãã ãŸãããããã
refs
ã䜿çšããŠãã³ã³ããŒãã³ãã®ã€ã³ã¹ã¿ã³ã¹ããã§ããããã³ååŸããŸãã
ãããã®ã³ã³ãããŒã©ãŒã¯ãã¢ããªã±ãŒã·ã§ã³ã®èµ·åæã«äœæãããã©ã€ããµã€ã¯ã«å
šäœã§æ©èœããŸãã ãã¥ãŒã¯äœæããã³åé€ãããè€æ°ã®ã€ã³ã¹ã¿ã³ã¹ãååšããå Žåããããã³ã³ãããŒã©ãŒã¯å
šå¡ã«ãµãŒãã¹ãæäŸããŸãã
é£ãã
倧èŠæš¡ãªã¢ããªã±ãŒã·ã§ã³ã®å Žåããããã®ææ³ã«ã¯ããã€ãã®å°é£ã䌎ããŸãã
ãã®ãããªå Žåããªãã¬ãŒã³ããŒã·ã§ã³ãšã³ã³ãããŒã©ãŒã¯ãç°ãªãéçºããŒã ã®ç°ãªãäœæè
ãäœæããæçµã¢ããªã±ãŒã·ã§ã³ã«çµ±åã§ããŸãã ãŸããã³ã³ãããŒã©ãŒãæå³ãããã¢ã€ãã¢ã«ã®ã¿åå¿ããããšã確èªããããšã¯ããã§ã«å°é£ã§ãã ãŸããéçºè
ã¯éåžžãã¢ããªã±ãŒã·ã§ã³ã®èµ·åæã«äœæãããã³ã³ãããŒã©ãŒã®æ°ãæžãããããšèããŠããŸãã ãŸããã³ã³ãããŒã©ãŒãäœæããæ©äŒïŒå€å°ã®åªåãæã£ãŠïŒã延æããããããã³ã³ãããŒã©ãŒãåé€ããå¯èœæ§ããªããããã³ã³ãããŒã©ãŒãäžèŠã«ãªã£ãå Žåã§ãæ®ããŸãã
ViewControllers
Ext JS 5ã¯çŸåšã®ã³ã³ãããŒã©ãŒãšäžäœäºææ§ãããããšãèæ
®ããŠããã®ãããªåé¡ã解決ããããã«èšèšãããæ°ããã¿ã€ãã®ã³ã³ãããŒã©ãŒ
Ext.app.ViewController
ãŸãã ãœãªã¥ãŒã·ã§ã³ã¯æ¬¡ã®ããã«å®çŸãããŸãã
listeners
ãšreference
ã®æ§æããããã£reference
ããã¥ãŒãšã®éä¿¡ãç°¡çŽ åãããŸãã- ãã¥ãŒã®ã©ã€ããµã€ã¯ã«ã¯ã察å¿ããViewControllerãèªåçã«å¶åŸ¡ããããã«äœ¿çšãããŸãã
- ViewControllersã®è€éãã¯æ¬¡ã®ããã«è»œæžãããŸãã 1察1ã®é¢ä¿ã¯ã察å¿ããè¡šçŸã§äœ¿çšãããŸãã
- ã«ãã»ã«åã¯ããã¹ãããããã¥ãŒãäœæããããã«æäŸãããŠããŸãã
- ã³ã³ããŒãã³ããéžæãã察å¿ãããã¥ãŒã®äžã®ä»»æã®ã¬ãã«ã§ã€ãã³ãã远跡ããããšã¯åŒãç¶ãå¯èœã§ãã
ãªã¹ããŒ
listeners
æ°ãããã®ã§
listeners
ãŸããããExt JS 5ã§ã¯æ°ããæ©èœãè¿œå ãããŸããã æ°ãããªã¹ããŒã®ããå®å
šãªè°è«ã¯ãä»åŸã®èšäºãExt JS 5ã®å®£èšçãªã¹ããŒãã«ãããŸãã ViewControllersã§äœ¿çšããããã«ãããã€ãã®äŸãèŠãããšãã§ããŸãã 1ã€ç®ã¯ããã¹ãããããã¥ãŒã³ã³ããŒãã³ãã§ã®
listeners
æ§æã®éåžžã®äœ¿çšã§ãã
Ext.define('MyApp.view.foo.Foo', { extend: 'Ext.panel.Panel', xtype: 'foo', controller: 'foo', items: [{ xtype: 'textfield', fieldLabel: 'Bar', listeners: { change: 'onBarChange'
ãã®å Žåã
onBarChange
ååä»ããã³ãã©ãŒã«
onBarChange
ç¹å®ã®
scope
ããã
onBarChange
ãã
Bar
ããã¹ããã£ãŒã«ãã®ã€ãã³ãã·ã¹ãã èªäœããç¬èªã®ViewControllerãããã©ã«ãã³ã³ããã¹ãã«ããŸãã
æŽå²çã«ã
listeners
èšå®ã¯èŠªã³ã³ããŒãã³ãã§äœ¿çšããããã«äºçŽãããŠããŸããããã®ããããã¥ãŒã¯ç¬èªã®ã€ãã³ããåºæ¬ã¯ã©ã¹ã«ãã£ãŠåŒã³åºãããã€ãã³ããã©ã®ããã«ãªãã¹ã³ã§ããŸããïŒ çãã¯ãæ瀺çãªã³ã³ããã¹ãã䜿çšããããšã§ãã
Ext.define('MyApp.view.foo.Foo', { extend: 'Ext.panel.Panel', xtype: 'foo', controller: 'foo', listeners: { collapse: 'onCollapse', scope: 'controller' }, items: [{ ... }] });
ãã®äŸã§ã¯ãExtJS 5ã®2ã€ã®æ°æ©èœã
ååä»ãã¹ã³ãŒããšå®£èšãªã¹ããŒïŒçŽTranslã ïŒã䜿çšããŸãã ååä»ãã³ã³ããã¹ãã«çŠç¹ãåœãŠãŸãã ååä»ãã³ã³ããã¹ãã®å Žåã
"this"
ãš
"controller"
2ã€ã®ååãæå¹ã§ãã MVCã¢ããªã±ãŒã·ã§ã³ãäœæãããšãã¯ãã»ãšãã©åžžã«
"controller"
䜿çšããŸããããã¯æããã«ãç¬èªã®ViewControllerã«ãªããŸãïŒéå±€ã®äžäœã«ãããã¥ãŒã®ViewControllerã§ã¯ãããŸããïŒã
ãªããªã ãã¥ãŒã¯
Ext.Component
ã§ãã
Ext.Component
ãã®ãã¥ãŒã«
xtype
ãå²ãåœãŠãŸãããããã«ããã
textfield
è¡ã£ãã®ãšåãæ¹æ³ã§ä»ã®ãã¥ãŒã§ã€ã³ã¹ã¿ã³ã¹åã§ããŸãã ãã¹ãŠãã©ã®ããã«çµã¿åãããããã確èªããã«ã¯ãéå±€ãäœæããŸãã
Ext.define('MyApp.view.bar.Bar', { extend: 'Ext.panel.Panel', xtype: 'bar', controller: 'bar', items: [{ xtype: 'foo', listeners: { collapse: 'onCollapse' } }] });
ãã®å Žåã
Bar
ãã¥ãŒã¯èŠçŽ ã®1ã€ãšããŠ
Foo
ã€ã³ã¹ã¿ã³ã¹ãäœæããŸãã 次ã«ã
Foo
ãã¥ãŒãšåãæ¹æ³ã§
collapse
ã€ãã³ãããªãã¹ã³ããŸãã Ext JSããã³Sencha Touchã®ä»¥åã®ããŒãžã§ã³ã§ã¯ããããã®å®çŸ©ã¯ççŸããŠããŸããã ãã ããããã¯Ext JS 5ã§è§£æ±ºãããŸããFooã§å®£èšããããªã¹ããŒã¯ãViewController
Foo
ã§åäœãã
Bar
ã§å®£èšãããŸã-ViewController
Bar
ã
åç
§è³æ
ã³ã³ãããŒã©ããžãã¯ã§åºã䜿çšãããŠããæ©èœã®1ã€ã¯ãã¢ã¯ã·ã§ã³ãå®è¡ããããã«å¿
èŠãªã³ã³ããŒãã³ããååŸããããšã§ãã ãã®ãããªãã®ïŒ
Ext.define('MyApp.view.foo.Foo', { extend: 'Ext.panel.Panel', xtype: 'foo', controller: 'foo', tbar: [{ xtype: 'button', text: 'Add', handler: 'onAdd' }], items: [{ xtype: 'grid', ... }] }); Ext.define('MyApp.view.foo.FooController', { extend: 'Ext.app.ViewController', alias: 'controller.foo', onAdd: function () {
ããããã©ã®ããã«ããŠããŒãã«ïŒã¬ãŒãïŒãååŸããŸããïŒ ExtJS 4ã§ã¯ãæ§æ
refs
ãŸãã¯ãã®ä»ã®æ¹æ³ã䜿çšããŠã³ã³ããŒãã³ããååŸã§ããŸãã ãã¹ãŠã®ææ³ã§ã¯ãããŒãã«ãäžæã«èå¥ããããã«ãèªèå¯èœãªããããã£ãããŒãã«ã«æå®ããå¿
èŠããããŸãã å€ãæè¡è
ã¯ã
id
ïŒããã³
Ext.getCmp
ïŒ
Ext.getCmp
ãŸãã¯
itemId
ïŒ
refs
ãŸãã¯å¥ã®éžææ¹æ³ã䜿çšïŒã䜿çšããŠããŸããã
id
ã®å©ç¹ã¯ã¯ã€ãã¯ãã§ããã§ããã èå¥åã¯ã¢ããªã±ãŒã·ã§ã³å
šäœããã³DOMå
ã§äžæã§ããå¿
èŠããããŸãããããã¯åžžã«éæã§ãããšã¯éããŸããã
itemId
ãšããŸããŸãªçš®é¡ã®ã¯ãšãªïŒã¯ãšãªïŒã䜿çšãããšããæè»ã«ãªããŸãããé©åãªã³ã³ããŒãã³ããèŠã€ããã«ã¯æ€çŽ¢ããå¿
èŠããããŸãã
Ext JS 5ã®æ°ãã
reference
ã§ã¯ãåã«ããŒãã«ã«è¿œå ãã
lookupReference
ã䜿çšããŠååŸããŸãã
Ext.define('MyApp.view.foo.Foo', { extend: 'Ext.panel.Panel', xtype: 'foo', controller: 'foo', tbar: [{ xtype: 'button', text: 'Add', handler: 'onAdd' }], items: [{ xtype: 'grid', reference: 'fooGrid' ... }] }); Ext.define('MyApp.view.foo.FooController', { extend: 'Ext.app.ViewController', alias: 'controller.foo', onAdd: function () { var grid = this.lookupReference('fooGrid'); } });
ããã¯ã
itemId = 'fooGrid'
ãå²ãåœãŠãŠãã
this.down('#fooGrid')
ãå²ãåœãŠãããšã«äŒŒãŠããŸãã ãããããããŒãã®äžãã§ã¯ãéãã¯éèŠã§ãã ãŸãã
reference
æ§æã§ã¯ãã³ã³ããŒãã³ããææè
ãã¥ãŒã«ç»é²ããå¿
èŠããããŸãã 第äºã«ã
lookupReference
ã¡ãœããã¯ãã£ãã·ã¥ã«æŽæ°ã®å¿
èŠæ§ãå°ããŸãïŒã³ã³ããã®è¿œå ãŸãã¯åé€ã«ãããã®ãšä»®å®ããŸãïŒã ãã¹ãŠãæ£åžžã§ããã°ããã£ãã·ã¥ãããªã³ã¯ãè¿ãã ãã§ãã æ¬äŒŒã³ãŒãã§ïŒ
lookupReference: (reference) { var cache = this.references; if (!cache) { Ext.fixReferences();
ã€ãŸããæ€çŽ¢ã¯è¡ããããã³ã³ããã«èŠçŽ ãè¿œå ãŸãã¯åé€ããããšã«ãã£ãŠç Žæããæ¥ç¶ã¯ãå¿
èŠãªãšãã«å³åº§ã«ä¿®æ£ãããŸãã 以äžã§èŠãããã«ãå¹çã«å ããŠããã®ã¢ãããŒãã«ã¯ä»ã®å©ç¹ããããŸãã
ã«ãã»ã«å
Ext JS 4 MVCå®è£
ã§ã»ã¬ã¯ã¿ãŒã䜿çšããããšã¯éåžžã«æè»ã§ããããåæã«ããã€ãã®ãªã¹ã¯ã䌎ããŸããã ã»ã¬ã¯ã¿ãŒããã¹ãŠã®ã¬ãã«ã®ãã¹ãŠã®ã€ãã³ãããèŠãããšããäºå®ã¯åŒ·åã§ãããããšã©ãŒãçºçããã¡ã§ããã ããšãã°ã100ïŒ
ãšã©ãŒãªãã§åç¬ã§åäœããã³ã³ãããŒã©ãŒã¯ãæãŸãããªãäžèŽããã»ã¬ã¯ã¿ãŒãæã€æ°ãããã¥ãŒã衚瀺ããããšããã«ãšã©ãŒãäœæããå¯èœæ§ããããŸãã
ããã¯ããã€ãã®ãã©ã¯ãã£ã¹ã«åŸãããšã§è§£æ±ºã§ããŸãããViewControllerã§ãªã¹ããŒãšãªã³ã¯ã䜿çšãããšããããã®åé¡ã¯åçŽã«è§£æ¶ãããŸãã ãããŠãã¹ãŠã¯ã
reference
ãš
listeners
æ§æãViewControllerã§ã®ã¿ãã¥ãŒãæ¥ç¶ããããã§ãã ãã¹ãããããã¥ãŒã¯ãçŸåšã®ãã¥ãŒå
ã®ä»»æã®
reference
å€ã䜿çšã§ããŸãããããã®ååã¯ãäžäœã®éå±€ãã¥ãŒã«å¯ŸããŠéãããªãããšãç¥ã£ãŠããŸãã
åæã«ã
listeners
察å¿ããViewControllerããèŠæ±ããã誀ã£ãã»ã¬ã¯ã¿ãŒãæã€ä»ã®ã³ã³ãããŒã©ãŒã§åŠçããããšã¯ã§ããŸããã ãªã¹ããŒãã»ã¬ã¯ã¿ãããæãŸããããšãèãããšãããã2ã€ã®ã¡ã«ããºã ã¯ãã»ã¬ã¯ã¿ããŒã¹ã®ã¢ãããŒãã®äœ¿çšãæ£åœåãããå Žæã§åæã«æ©èœããŸãã
ãã®äŸãå®äºããããã«ããã¥ãŒãäžäœã¬ãã«ã®ãã¥ãŒã®ViewControllerã«ãã£ãŠåŠçãããã€ãã³ããçºçãããå ŽåãèããŠãã ããã ãããè¡ãããã«ãViewControllerã«ã¯ãã«ããŒã¡ãœãã
fireViewEvent
ãŸãã äŸïŒ
Ext.define('MyApp.view.foo.Foo', { extend: 'Ext.panel.Panel', xtype: 'foo', controller: 'foo', tbar: [{ xtype: 'button', text: 'Add', handler: 'onAdd' }], items: [{ xtype: 'grid', reference: 'fooGrid' ... }] }); Ext.define('MyApp.view.foo.FooController', { extend: 'Ext.app.ViewController', alias: 'controller.foo', onAdd: function () { var record = new MyApp.model.Thing(); var grid = this.lookupReference('fooGrid'); grid.store.add(record); this.fireViewEvent('addrecord', this, record); } });
ããã«ãããéå±€ã®äžäœã®ãã¥ãŒã§æšæºãªã¹ããŒã䜿çšã§ããããã«ãªããŸãã
Ext.define('MyApp.view.bar.Bar', { extend: 'Ext.panel.Panel', xtype: 'bar', controller: 'bar', items: [{ xtype: 'foo', listeners: { collapse: 'onCollapse', addrecord: 'onAddRecord' } }] });
fireViewEvent
ããïŒ fireViewEvent
ã«ããã§ãããæ¬è³ªçã«fireViewEvent
䜿çšfireViewEvent
ãšãViewControllerå
ã®ãã¥ãŒã®ã€ãã³ããçºçãããããšãã§ãfireViewEvent
ã ã€ãŸãããã®å ŽåãViewControllersããªãå Žåãããã¯ãFooããã¥ãŒã³ãŒãã§éåžžã®fireEvent
ãåŒã³åºãããšã«fireEvent
ããŸãããªã¹ããŒãšã€ãã³ããã¡ã€ã³
Ext JS 4.2ã§ã¯ãMVCã€ãã³ããããŒãžã£ãŒã«ã€ãã³ããã¡ã€ã³ãå°å
¥ãããŸããã ãããã®ãã¡ã€ã³ã¯ãåŒã³åºããããšããã«ã€ãã³ããã€ã³ã¿ãŒã»ããããã»ã¬ã¯ã¿ãŒã®äžèŽã«ãã£ãŠããããåŠçããã³ã³ãããŒã©ãŒã«æž¡ããŸãã
component
ã€ãã³ããã¡ã€ã³ã¯ã³ã³ããŒãã³ãã»ã¬ã¯ã¿ãŒãå®å
šã«ãµããŒãããŠããŸãããä»ã®ãã®ã¯ãµããŒããå¶éãããŠããŸãã
Ext JS 5ã§ã¯ãåViewControllerã¯
view
ãšåŒã°ããæ°ããã¿ã€ãã®ã€ãã³ããã¡ã€ã³ã®ã€ã³ã¹ã¿ã³ã¹ãäœæããŸãã ãã®ã€ãã³ããã¡ã€ã³ã«ãããViewControllersã¯æšæºã®
listen
ããã³
control
ã¡ãœããã䜿çšã§ããŸãããæé»çã«ã¹ã³ãŒããç¬èªã®ãã¥ãŒã«å¶éããŸãã ãŸãã圌ã¯èªåã®èŠè§£ã«äžèŽããæ°ããç¹å¥ãªã»ã¬ã¯ã¿ãŒãè¿œå ããŸãã
Ext.define('MyApp.view.foo.FooController', { extend: 'Ext.app.ViewController', alias: 'controller.foo', control: { '#': {
ãªã¹ããŒãšã»ã¬ã¯ã¿ãŒã®äž»ãªéãã¯ã次ã®äŸã§èŠãããšãã§ããŸãã
button
ã»ã¬ã¯ã¿ãŒã¯ããã®ãã¥ãŒãŸãã¯ä»»æã®ãµããã¿ã³ã®ä»»æã®ãã¿ã³ã«äžèŽããŸãããå°ãªããšããµããµããµãã§ã¯éèŠã§ã¯ãããŸããã ã€ãŸããã»ã¬ã¯ã¿ããŒã¹ã®ãã³ãã©ãŒã¯ç¶æ¿å¢çãèæ
®ããŸããã ãã®åäœã¯ã以åã®
Ext.app.Controller
åäœãšäžè²«æ§ããããç¶æ³ã«ãã£ãŠã¯äŸ¿å©ãªãã¯ããã¯ãããããŸããã
æåŸã«ããããã®ãã¡ã€ã³ã¯ããã¹ããèæ
®ããŠãã€ãã³ããè¡šçŸã®éå±€ã«å¹ççã«è»¢éããŸãïŒ
ã€ãã³ããããã«ã¢ãã-çŽTranslã ïŒã ã€ãŸããã€ãã³ããããªã¬ãŒããããšãæåã«æšæºãªã¹ããŒã«æž¡ãããŸãã 次ã«ãææè
ã®ViewControllerã«æž¡ããã次ã«éå±€ãäžã£ãŠèŠªã®ViewControllerïŒååšããå ŽåïŒã«æž¡ãããŸãã æçµçã«ãã€ãã³ãã¯
Ext.app.Controller
ã³ã³ãããŒã©ãŒã§åŠçããããã«æšæº
component
ã€ãã³ããã¡ã€ã³ã«
Ext.app.Controller
ããŸãã
ã©ã€ããµã€ã¯ã«
倧èŠæš¡ã¢ããªã±ãŒã·ã§ã³ã®æšæºçãªãã©ã¯ãã£ã¹ã¯ãå¿
èŠã«å¿ããŠã³ã³ãããŒã©ãŒãåçã«äœæããããšã§ãã ããã«ãããã¢ããªã±ãŒã·ã§ã³ã®ããŒãæéãççž®ããä»ã®ã³ã³ãããŒã©ãŒã«åœ±é¿ãäžããããšãªãããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸãã 以åã®ããŒãžã§ã³ã§ã®ãã®ã¢ãããŒãã®å¶éã¯ãäœæããããšãããããã®ã³ã³ãããŒã©ãŒãã¢ããªã±ãŒã·ã§ã³ã®å¯¿åœãéããŠæ©èœãç¶ããããšã§ããã ããããç Žå£ããŠãªãœãŒã¹ã解æŸããããšã¯äžå¯èœã§ããã ãŸããã³ã³ãããŒã©ãŒããã¥ãŒã®è€æ°ã®ã€ã³ã¹ã¿ã³ã¹ãæäŸã§ããåäžã®ã€ã³ã¹ã¿ã³ã¹ãæäŸã§ãããšããæå³ã§ãäœãå€ãã£ãŠããŸããã
ãããã£ãŠããã¥ãŒã®ã©ã€ããµã€ã¯ã«ã§ã¯ãViewControllerãããã«äœæããããã®ãã¥ãŒå
šäœã«ããã£ãŠãã®ãã¥ãŒã«ã¢ã¿ãããããŸãã ãã¥ãŒãåé€ããããšãViewControllerãåé€ãããŸãã ããã¯ãViewControllerããã¥ãŒããªããããã€ãã®å Žåã«åäœããå¿
èŠããªããªã£ãããšãæå³ããŸãïŒãã¥ãŒããªãã
ãå€ãã®ãã¥ãŒãããç¶æ
ã管çããããšã匷å¶ãããªããªããŸãã-æããã«ãå€å
žçãªã³ã³ãããŒã©ãŒãšã®æ¯èŒããããŸã;ãããTransl ã
1察1ã®é¢ä¿ã«ããããªã³ã¯ãã©ããã³ã°ãç°¡çŽ åããããªã¢ãŒãã³ã³ããŒãã³ãã®æŒæŽ©ãäžå¯èœã«ãªããŸãã ViewControllerã©ã€ããµã€ã¯ã«ã§æ¬¡ã®äž»èŠãªã€ãã³ããçºçããŸãã
- beforeInitã¯ãinitComponentã¡ãœãããåŒã³åºãåã«ãã¬ãŒã³ããŒã·ã§ã³ãå¶åŸ¡ããããã«ãªãŒããŒã©ã€ãã§ããã¡ãœããã§ãã ã³ã³ããŒãã³ã
initConfig
ãŸãã¯ãã®ã³ã³ã¹ãã©ã¯ã¿ãŒãinitConfig
ãšãã«ãã³ã³ãããŒã©ãŒãäœæãããçŽåŸã«åŒã³åºãinitConfig
ãŸãã - init -
initComponent
ã¡ãœãããinitComponent
å®äºããçŽåŸã«åŒã³åºããinitComponent
ã ããã¯ããã¬ãŒã³ããŒã·ã§ã³ãæ¢ã«åæåãããŠããã³ã³ãããŒã©ãŒãåæåããããã®å
žåçãªãã€ã³ãã§ãã - initViewModel-ãã¥ãŒã®ViewModelãäœæããããšãã«åŒã³åºãããŸãïŒå®çŸ©ãããŠããå ŽåïŒã
callParent
ãªãœãŒã¹ã®ã¯ãªãŒã³ã¢ããïŒ callParent
åŒã³åºããå¿ããªãã§ãã ããïŒã
ãããã«
ViewControllersã¯ãã¢ããªã±ãŒã·ã§ã³ã®ã¢ããã°ã¬ãŒãã«åªããŠãããšæããŸãã ãŸããViewModelsãšããŸãæ©èœãããããäž¡æ¹ã®ã¢ãããŒãã®é·æãçµã¿åãããããšãã§ããŸãã ä»åŸã®ãªãªãŒã¹ã«æºè¶³ããŠãããã¢ããªã±ãŒã·ã§ã³ã®æ¹åãæè¿ããŸãã
PS
åã®æçš¿ïŒ
Ext JS 5ïŒMVCãMVVMãªã©