![](https://habrastorage.org/storage2/992/cec/745/992cec745fb34f5981af67803ec6a2e1.png)
æè¿ãŸã§ãå¿ èŠã«å¿ããŠããªãã©ã€ã³ã§äœæ¥ããæ©äŒããŠãŒã¶ãŒã«äžããããã«ãã€ãŸãã¢ã¯ãã£ããªã€ã³ã¿ãŒãããæ¥ç¶ãªãã§ãã·ãã¯ã¯ã©ã€ã¢ã³ããéçºããå¿ èŠããããŸããã ãã®ã¢ãããŒãã§ã¯ããŠãŒã¶ãŒã¯ããŒã«ã«ã«ä¿åãããã¢ããªã±ãŒã·ã§ã³ã«ããŒã¿ãå ¥åãããããã¯ãŒã¯ã³ãŒãã貌ãä»ããŠãããžãã¯ãã¿ã³SynchronizeãæŒããæºè¶³ããŠãè¶ã飲ã¿ã«è¡ããŸãã
説æããã¹ããŒã ã«ã¯ã倪ã£ãã¯ã©ã€ã¢ã³ãã®ãã¹ãŠã®æ¬ ç¹ããããŸãã ããã«ã¯ããã©ãŠã¶ãŒã§äœæ¥ããããã®å¥ã®ã¢ããªã±ãŒã·ã§ã³ãéçºããå¿ èŠæ§ïŒçŸä»£äžçã§ã¯éåžžã®èŠä»¶ã§ãïŒãè¿œå ã®ãœãããŠã§ã¢ãã€ã³ã¹ããŒã«ããå¿ èŠæ§ããããæŽæ°ããåé¡ãããã³äžè¬çãªãã¹ã¯ãããã¢ããªã±ãŒã·ã§ã³éçºã¹ãã·ã£ãªã¹ããéãå¿ èŠæ§ãå«ãŸããŸãã ç§ãã¡ã«ã¯ãWebéçºè ãšããŠããªãã©ã€ã³ã§äœæ¥ãããšããåé¡ãåžžã«åã®éªšã§ããããšã«åæããŸãã
ä»æ¥ããã®åé¡ã¯ãšã¬ã¬ã³ãã«è§£æ±ºãããŸãã-ããŒã«ã«ã¹ãã¬ãŒãžã§HTML5ã䜿çšããïŒãã®ã¹ãã¬ãŒãžãééçã«æäœããæ©èœãåããExt JS 4ãããã³HTML5ã¢ããªã±ãŒã·ã§ã³ãã£ãã·ã¥ïŒã¢ããªã±ãŒã·ã§ã³ãã£ãã·ã¥ïŒïŒã ãããã®æè¡ã®çµã¿åããã«ããã次ã®ã¹ããŒã ãå®è£ ã§ããŸãïŒãããã¯ãŒã¯ãååšããå Žåãéçãã¡ã€ã«ïŒHTML / CSS / JSã³ãŒããšç»åïŒããµã€ãããããŠã³ããŒãããããããã¯ãŒã¯ãååšããªãå Žåã¯éäžãµãŒããŒããŒã¿ããŒã¹ã§åäœããéçãã¢ããªã±ãŒã·ã§ã³ãã£ãã·ã¥ããããŠã³ããŒããããããŒã«ã«ã¹ãã¬ãŒãžã§åäœããŸããã€ã³ã¿ãŒããããžã®ã¢ã¯ã»ã¹ã衚瀺ããããšãã«ãµãŒããŒããŒã¿ããŒã¹ã«ä¿åãããŸãã åæã«ãããŒãžURLãžã®ã¢ã¯ãã£ããªæ¥ç¶ããªãå Žåããã©ãŠã¶ã¯ãããã¯ãŒã¯ã¢ã¯ã»ã¹ãšã©ãŒã§ã¯ãªãã ããŒã«ã«ã¹ãã¬ãŒãžã§æ©èœããæ©èœã·ã¹ãã ã衚瀺ããŸãã 説æãšåäœäŸ ïŒç§ã®vdsã¯Habroeffectã«è©²åœããªããããããŸããïŒ-ã«ããã®äžã èšäºã¯ããªã倧ããããšãå€æããŸããããããŸãããã°ãéåžžã«æçã§ãã
HTML5
HTML 5ã«ç²ŸéããŠããå Žå- ãã®ç« ãã¹ãããããŠãã ãããããã§ãªãå Žåã¯-ããã§ã䜿çšãããŠããæè¡ã®ç°¡åãªèª¬æããããŸãã
ã¢ããªã±ãŒã·ã§ã³ãã£ãã·ã¥
ã¢ããªã±ãŒã·ã§ã³ãã£ãã·ã¥-ã¢ããªã±ãŒã·ã§ã³ãã£ãã·ã¥ãéçãã¡ã€ã«ãããŒã«ã«ã«ä¿åãããããã¯ãŒã¯ã«æ¥ç¶ããã«äœ¿çšã§ããŸãã ãã£ãã·ã³ã°çšã®ãã¡ã€ã«ã®ãªã¹ãã¯ãããã§ã¹ããã¡ã€ã«ã«ããããã®ã¢ãã¬ã¹ã¯htmlã¿ã°ã§ç€ºãããŸãã次ã«äŸã瀺ããŸãã
<html manifest="http://site.ru/names.appcache">âŠ</html>
ãããã§ã¹ããã¡ã€ã«ã®MIMEã¿ã€ãã¯ãtext / cache-manifestã«èšå®ããå¿ èŠããããŸãã ããšãã°ãApache WebãµãŒããŒã®å Žåãæ§æãã¡ã€ã«ã«è¿œå ããŸãã
AddType text/cache-manifest .appcache
Javaã®å Žåãweb.xmlã«è¿œå ããŸãã
<mime-mapping> <extension>appcache</extension> <mime-type>text/cache-manifest</mime-type> </mime-mapping>
åçŽãªãããã§ã¹ããã¡ã€ã«ã®äŸïŒ
CACHE MANIFEST index.html stylesheet.css images/logo.png scripts/main.js
æåã®è¡ïŒCACHE MANIFESTïŒã¯å¿ é ã§ãã åžžã«ãããã¯ãŒã¯ãå¿ èŠãšãããªãœãŒã¹ãè¿œå ããå Žåã¯ãNETWORKè¡ã®åŸã«è¿œå ããŸãã
CACHE MANIFEST index.html NETWORK: login.php
ãããã§ã¹ããã¡ã€ã«åœ¢åŒã«ã€ããŠè©³ããã¯ããã¡ããã芧ãã ããã ã¢ããªã±ãŒã·ã§ã³ãã£ãã·ã¥ã¯3ã€ã®æ¹æ³ã§æŽæ°ã§ããŸãããã©ãŠã¶ã§ãŠãŒã¶ãŒã匷å¶çã«åé€ããããšããããã§ã¹ããã¡ã€ã«ãæŽæ°ããããšãã£ãã·ã¥ãæŽæ°ãããããšãæåŸã«JavaScriptãããã£ãã·ã¥ã匷å¶çã«æŽæ°ããããšãã§ããŸãã
ãã©ãŠã¶ã®ãµããŒãïŒChrome 4 +ãFirefox 4 +ãSafari 4 +ãOpera 11 +ãIE 10ãiOS 5 +ãAndroid 3+ã
ããŒã«ã«ã¹ãã¬ãŒãž
HTML5ã®ããŒã«ã«ã¹ãã¬ãŒãžã䜿çšãããšãããŒã¿ãããŒã«ã«ã«ä¿åã§ããŸããæšå¥šãµã€ãºã®å¶éã¯5 MBã§ãããã ããäžéšã®ãã©ãŠã¶ãŒã§ã¯å¢ããããšãã§ããŸãã ããŒãžãŸãã¯ãã©ãŠã¶ãéããŠãããŒã¿ã¯æ¶ããŸããã
ã¹ãã¬ãŒãžã¯ãã¡ã€ã³ããšã«1ã€ã§ããã€ãŸãããµã€ãã®ç°ãªãããŒãžããåãããŒã¿ãå©çšã§ããŸãã ããã«ãåæã«éããããã¹ãŠã®ããŒãžãããªããžããªå ã®ããŒã¿ã®å€æŽã远跡ã§ããŸãã ããšãã°ãããŒãžã®1ã€ããªããžããªã®å€æŽãåŒãèµ·ããããã®çµæãé£æ¥ããã¿ãã§éããŠããå¥ã®ããŒãžãå€æŽãããå ŽåããããŸãã ãã£ãããã§ããã
ããŒã«ã«ã¹ãã¬ãŒãžã®æäœã¯ç°¡åã§ã-ããã¯ãã ã®ããŒããªã¥ãŒæ§é ã§ãïŒ
localStorage.setItem('name', 'Hello World!'); localStorage.getItem('name'); localStorage.removeItem('name');
ãµããŒããããŠãããã©ãŠã¶ãŒïŒChrome 5以éãFirefox 3.6以éãOpera 10以éãSafari 4以éãIE 8以éã
Ext JS 4ã®ããŒã«ã«ã¹ãã¬ãŒãž
4çªç®ã®Ext JSã§ã¯ãããŒã«ã«ã¹ãã¬ãŒãžãééçã«æäœããããŒã«ã«ã¹ãã¬ãŒãžã«åå¥ã®ãããã·ãæäŸã§ããŸãã ãããã£ãŠããããã·ã¿ã€ããajaxããlocalstorageã«å€æŽããã ãã§ããã¹ãã¢ã®ãã¹ãŠã®Ext JSããŒã¿ã¯ãµãŒããŒããã§ã¯ãªãããã©ãŠã¶ãŒã®ããŒã«ã«ã¹ãã¬ãŒãžããããŠã³ããŒããããŸãã
è¿œãããïŒ
![](https://habrastorage.org/storage2/00b/f61/8a6/00bf618a64b2a3e42d9b0a96de92f0db.png)
ãã¡ã€ã«æ§é ã¯ã¹ã¯ãªãŒã³ã·ã§ããã«ç€ºãããŠãããindex.htmlã/ app.jsãããã³/ app /ãã£ã¬ã¯ããªã¯å®éã«éèŠã§ãã
Ext JSã®4çªç®ã®ããŒãžã§ã³ã§ã¯ãMVCã¢ãã«ã䜿çšããŠã€ã³ã¿ãŒãã§ã€ã¹ãéçºããããšãææ¡ããŠããŸãã
- / app / model /-ã¢ãã«ã®ãã£ã¬ã¯ããªã ãã®å Žåã®ã¢ãã«ã¯ãã¹ãã¬ãŒãžãã£ãŒã«ãã®èª¬æãã€ãŸãããŒã¿æ§é ïŒãã¬ãŒã ã¯ãŒã¯ã®ç¬¬3ããŒãžã§ã³ã®Recordã«é¡äŒŒïŒãšãå¿ èŠã«å¿ããŠãããã·ã®èª¬æã§ãã ãããã·ã¯ãããŒã¿ãåä¿¡ããæ¹æ³ïŒAjaxãJSON-PãããŒã«ã«ã¹ãã¬ãŒãžãªã©ïŒãèšè¿°ããŸãã ãã®ã¢ãã«ã䜿çšããŠããããã·ãã¢ãã«ãŸãã¯ãªããžããªã«ãã€ã³ãã§ããŸãã
- / app / view /-ãããã³ã°ã®ãã£ã¬ã¯ããªã ãã¥ãŒ-èŠèŠèŠçŽ ïŒãŠã£ãžã§ããïŒ
- / app / controller /-ã³ã³ãããŒã©ãŒã®ãã£ã¬ã¯ããªã ã³ã³ãããŒã©ãŒ-衚瀺ããžãã¯ãã¢ãã«ã®ã€ã³ã¹ã¿ã³ã¹åãªã©ãã€ãŸããã¢ãã«ããªããžããªãŒããŠã£ãžã§ãããæ¥ç¶ãããã¹ãŠã®ãã®
ã¢ããªã±ãŒã·ã§ã³ã¯ã2ã€ã®ãŠã£ãžã§ããïŒããŒãã«ïŒã°ãªããïŒãå éšã«ãããŠã£ã³ããŠïŒãŠã£ã³ããŠïŒïŒã§æ§æãããŸãã ããŒãã«ã¯ãã€ã³ã¿ãŒãããæ¥ç¶ã®å¯çšæ§ã«å¿ããŠããµãŒããŒãŸãã¯ããŒã«ã«ã¹ãã¬ãŒãžã䜿çšããŸãã
ãã®ããããã¡ããããã¹ãŠHTMLã§å§ãŸããŸãã
<!-- - Application Cache --> <html manifest="UsersApp.appcache"> <head> <link rel="stylesheet" type="text/css" href="ext-4.0.7-gpl/resources/css/ext-all.css" /> <link rel="stylesheet" type="text/css" href="style.css" /> <script src="ext-4.0.7-gpl/ext-dev.js" type="text/javascript" charset="utf-8"></script> <script src="app.js" type="text/javascript" charset="utf-8"></script> </head> <body style="padding: 25px;"><div id="console"><h2> </h2></div></body> </html>
ãããã§ã¹ããã¡ã€ã«ã«ã¯ãã£ãã·ã¥ã«å¿ èŠãªãªãœãŒã¹ã瀺ããããã¬ãŒã ã¯ãŒã¯ã¹ã¿ã€ã«ãšã«ã¹ã¿ã ã¹ã¿ã€ã«ãæ¥ç¶ãããExt JSã«ãŒãã«ãšã¢ããªã±ãŒã·ã§ã³ãšã³ããªãã€ã³ãapp.jsãããŒããããŸãã Ext JS 4ã¯ãå¿ èŠãªJSãã¡ã€ã«ããªã³ã¶ãã©ã€ã§æ¥ç¶ã§ããåçããŒãã¡ã«ããºã ãå®è£ ããŠããŸãããããã£ãŠãapp.jsã¢ããªã±ãŒã·ã§ã³èªäœã®1ã€ã®JSãã¡ã€ã«ã®ã¿ãhtmlã«çŽæ¥æžã蟌ãŸããŸãã
å ¥åJavaScriptãã¡ã€ã«ã¯åçŽã§ãã
// JS Ext.Loader.setConfig({ enabled: true, disableCaching: false, paths: {UsersApp: 'app', Ext: 'ext-4.0.7-gpl/src'} }); // , Ext.require(["UsersApp.view.win"]); Ext.application({ name: 'UsersApp', launch: function(){ Ext.create("UsersApp.view.win").show(); }, controllers: ["Main"] });
Ext.requireïŒïŒæ§é ã¯ãlaunchïŒïŒã¡ãœãããåŒã³åºããŠã¢ããªã±ãŒã·ã§ã³ãèµ·åããåã«ãäŸåé¢ä¿ãã€ãŸãäºåã«ããŒãããå¿ èŠããããªããžã§ã¯ããæå®ããããã«èšèšãããŠããŸãã äžè¬çã«ããã®ãããªäŸåé¢ä¿ãæå®ããªãå ŽåãExt.LoaderããŒãããŒããŒãæ§æãããŠããå Žåãå®è¡æã«èªåçã«ããŒããããŸãããé床ããããã«äœäžãããŸã£ããåé¡ãããŸãããExt.Loaderã¯ããã®ãããªæé©ã§ãªãããŒãã«é¢ããã¡ãã»ãŒãžããã©ãŠã¶ãŒã®JSã³ã³ãœãŒã«ã«è¡šç€ºããŸãExt.requireïŒïŒã®äœ¿çšã®é©åæ§ã
å®éããªããžã§ã¯ãã®ååã¯ããããã®ãªããžã§ã¯ããä¿åãããŠãããã¹ã«å¯Ÿå¿ããŠããããšã«æ³šæããŠãã ããã ããšãã°ãUsersApp.store.storeLocalãªããžã§ã¯ãã¯/app/store/storeLocal.jsãã£ã¬ã¯ããªã«ä¿åãããUsersAppã¢ããªã±ãŒã·ã§ã³åããç©çãã£ã¬ã¯ããªã¢ããªã®ååãžã®ãããã³ã°ã¯Ext.LoaderããŒãããŒããŒèšå®ã§èšå®ãããŸãã
泚ïŒåçããŒãã£ã³ã°ã¡ã«ããºã ã¯ãéçºæ®µéã§äŸ¿å©ã§ããæ¬çªã·ã¹ãã ã§ã¯ã Sencha SDKããŒã« ïŒ äŸ ïŒã䜿çšããŠãã¹ãŠã®JSã³ãŒããåäžã®ãã¡ã€ã«ã«åéããã³ãŒããå«ãå€æ°ã®ãã¡ã€ã«ã®ããŒããäžèŠãªãµãŒããŒãªã¯ãšã¹ãã®çæãªã©ãåé¿ããããšããå§ãããŸã
ãã®ãããã¢ããªã±ãŒã·ã§ã³ã¯UsersApp.view.winãŠã£ãžã§ãããäœæããã¡ã€ã³ã³ã³ãããŒã©ãŒã䜿çšããŸãã ã³ã³ãããŒã©ãŒã¯ãlaunchïŒïŒã¡ãœãããåŒã³åºãããåã«åžžã«åŒã³åºãããã·ã¹ãã ã³ã³ããŒãã³ãããã€ã³ãããããã«å¿ èŠãªæºåäœæ¥ããã¹ãŠå®è¡ããŸãã
UsersApp.view.winãŠã£ã³ããŠã®ã³ãŒãã¯åçŽã§ãïŒä»¥éãäž»èŠãªæ§æãã©ã¡ãŒã¿ãŒãé«ãå¹ ãªã©ã®èŠèŠçãªæ§æããã®ä»ã®éèŠã§ãªãç¬éã¯ãèšäºã®æåŸã«ãããªã³ã¯ã®ãœãŒã¹ã³ãŒãã«ãããŸãïŒã
Ext.define('UsersApp.view.win', { extend: 'Ext.Window', requires: ['UsersApp.view.grid'], itemId: 'usersWindow', layout: 'fit', items: [ { xtype: 'NamesGridPanel', itemId: 'NamesGrid' } ] });
ããã§ãUsersApp.view.winã¯ã©ã¹ãå®çŸ©ããŸããããã¯ãæšæºã®Ext.WindowãŠã£ã³ããŠã®ã¯ã©ã¹ãæ¡åŒµããUsersApp.view.gridãããèªäœã§ããŒãããå¿ èŠããããŸãã ããŒãã«ã³ãŒãïŒ
Ext.define('UsersApp.view.grid', { extend: 'Ext.grid.Panel', alias: 'widget.NamesGridPanel', requires: ['Ext.grid.plugin.CellEditing', 'Ext.form.field.*'], itemId: 'usersGrid', // - initComponent : function() { // // , // CellEditing this.cellEditing = Ext.create('Ext.grid.plugin.CellEditing', { clicksToEdit: 2 }); this.plugins = this.cellEditing; this.columns = this.columnsGet(); this.tbar = this.tbarGet(); // this.callParent(); }, tbarGet: function(){ return[ { text: '', iconCls: 'add', handler: this._onUserAddClick }, { text: '', iconCls: 'delete', handler: this._onUserDelClick } ] }, columnsGet: function(){ return [ { text: '', field: 'textfield', dataIndex: 'firstName' }, { text : '', field: 'textfield', dataIndex: 'secondName' } ] }, _onUserAddClick: function(button){ // }, _onUserDelClick: function(button){ // } })
ããã§ã¯æ°ããããšã¯ãããŸãã-ããŒãã«ã¯ã©ã¹ãäœæãããåãæ§æããïŒåïŒãã¬ã³ãŒããè¿œå /åé€ããããã®ãã¿ã³ãåããããŒã«ããŒãè¿œå ãããŸãïŒã³ãŒããèªã¿ãããããããã«ããããã®ã¡ãœããã®å®è£ ã¯é衚瀺ã«ãªããŸãïŒã ã¹ãã¬ãŒãžã¯ãŸã ããŒãã«ã«ãã€ã³ããããŠããªãããšã«æ³šæããŠãã ãããããã¯ã³ã³ãããŒã©ãŒã§è¡ãããŸãã
ãµãŒããŒãšããŒã«ã«ã®2ã€ã®ãªããžããªãäœæããŸãã ãããã®ã¹ãã¬ãŒãžã¯äž¡æ¹ãšãåãã¢ãã«ïŒå®éã«ã¯åãæ§é ã®ããŒã¿ãå«ãããïŒãæã¡ãŸããããããã·ã¯ç°ãªããŸãã ã¢ãã«ã¯ãUsersApp.model.Namesã¯ã©ã¹ã«ãã£ãŠèšè¿°ãããŸãã
Ext.define('UsersApp.model.Names', { fields: [{name: 'id', type: 'int', useNull: true}, {name: 'firstName'}, {name: 'secondName'}], extend: 'Ext.data.Model', // , validations: [{ type: 'length', field: 'firstName', min: 1 },{ type: 'length', field: 'secondName', min: 1 } ] });
ã¢ãã«ã¯3ã€ã®ãã£ãŒã«ãã§æ§æãããŸã-人ã®èå¥åã圌ã®ååãšå§ã èå¥åã«ã¯æŽæ°åãæå®ãããuseNullãã©ã¡ãŒã¿ãŒã䜿çšãããŸããããã¯ãæŽæ°ãšããŠèªèã§ããªãå Žåã¯å€ãnullã«èšå®ããŸãïŒããã§ãªãå Žåã¯0ã«ãªããŸãïŒã ã¢ãã«ã«ã¯ããªããŒã¿ãŒã瀺ãããŸã-å人ã®ååãšå§ã¯å°ãªããšã1æåã§ããå¿ èŠããããŸãã
ãµãŒããŒåŽã®ããŒã¿ãããŒãããã¹ãã¬ãŒãžãäœæããŸãã
Ext.define('UsersApp.store.store', { extend: 'Ext.data.Store', requires : ['UsersApp.model.Names', 'Ext.data.proxy.Ajax'], model: 'UsersApp.model.Names', proxy: { type: 'ajax', api: { read: 'crud.php?act=read', update: 'crud.php?act=update', create: 'crud.php?act=create', destroy: 'crud.php?act=delete' }, reader: { type: 'json', root: 'names', idProperty: 'id' }, writer: { type: 'json', writeAllFields: false, root: 'names' } } });
ãã®ããããµãŒããŒèªã¿èŸŒã¿ã¢ãã«ã¯ãããŒã¿æ§é ãèšè¿°ããäœæãããã¢ãã«ãšãããããããŒã¿ã®èªã¿åããšæžã蟌ã¿çšã«æ§æãããããªãŒããŒããªãŒããŒãšãã©ã€ã¿ãŒãã©ã€ã¿ãŒãåããAjaxãããã·ã䜿çšããŸãã apiãã©ã¡ãŒã¿ãŒã¯ãExt JSãããŒã¿ã®èªã¿åããæŽæ°ãè¿œå ãåé€ã®ããã«ã¢ã¯ã»ã¹ããURLã¢ãã¬ã¹ãæå®ããŸãã
ããŒã«ã«ã¹ãã¬ãŒãžã³ãŒãïŒ
Ext.define('UsersApp.store.storeLocal', { extend: 'Ext.data.Store', requires : ['UsersApp.model.Names', 'Ext.data.proxy.LocalStorage'], model: "UsersApp.model.Names", proxy: { type: 'localstorage', id : 'Names' } });
localstorageããããã·ãšããŠæå®ããŸã-ãã¹ãŠã®ããŒã¿ã¯ããŒã«ã«ã¹ãã¬ãŒãžããããŒããããŸãã idã«ã¯ãããŒãšå€ã®ããŒã«ã«ã¹ãã¬ãŒãžã«ååãäœæããããã«äœ¿çšãããäžæã®ãããã·èå¥åãæå®ããŸãã
ãŸãšãããšã ã«ã©ã ãèšå®ãããŠããããã¹ãã¬ãŒãžãæ¥ç¶ãããŠããªãããŒãã«ãå«ããŠã£ã³ããŠãããã1ã€ã®ã¢ãã«ãæã€2ã€ã®ãªããžããªïŒãµãŒããŒãšããŒã«ã«ïŒããããŸãã ããããã¹ãŠãäœæ¥äžã®ã¢ããªã±ãŒã·ã§ã³ã«æ¥ç¶ããå¿ èŠããããŸãïŒ ã³ã³ãããŒã©ãŒã¯ãããè¡ããŸãïŒ
Ext.define("UsersApp.controller.Main", { extend: 'Ext.app.Controller', requires: [ // - "" 'UsersApp.Utils', 'UsersApp.store.storeLocal', 'UsersApp.store.store' ], init: function(){ // getStore , // - var storeLocal = this.getStore("storeLocal"); var store = this.getStore("store"); // , // __ storeLocal.addListener('load', function(){ // - // , . UsersApp.Utils.ping // callback UsersApp.Utils.ping({ success: this._onPingSuccess, // failure: this._onPingFailure // }, this); }, this); // storeLocal.load(); }, _onPingSuccess: function(){ // var win = Ext.ComponentQuery.query('#usersWindow')[0]; var storeLocal = this.getStore('storeLocal'); var store = this.getStore('store'); var grid = win.getComponent('NamesGrid'); win.setTitle(", ") // localCnt = storeLocal.getCount(); // , // , if (localCnt > 0){ // , // // for (i = 0; i < localCnt; i++){ var localRecord = storeLocal.getAt(i); var deletedId = localRecord.data.id; delete localRecord.data.id; store.add(localRecord.data); localRecord.data.id = deletedId; } // store.sync(); // for (i = 0; i < localCnt; i++){ storeLocal.removeAt(0); } } store.load(); // grid.reconfigure(store); grid.store.autoSync = true; }, _onPingFailure: function(){ // , var win = Ext.ComponentQuery.query('#usersWindow')[0]; var storeLocal = this.getStore('storeLocal'); var store = this.getStore('store'); var grid = win.getComponent('NamesGrid'); win.setTitle(", ") // grid.reconfigure(storeLocal); grid.store.autoSync = true; } });
ããããã®ã³ãŒãïŒ é çªã«è¡ããŸãããã ãŸããã³ã³ãããŒã©ãŒã®å Žåãå¿ èŠãªäŸåé¢ä¿ãæå®ããå¿ èŠããããŸãããã®å Žåããããã¯å éšã®Utilities UsersApp.Utilsãš2ã€ã®ã¹ãã¬ãŒãžã§ãã initã¡ãœããã¯ãã³ã³ãããŒã©ãŒãåæåããããšãã«åŒã³åºãããŸããã€ãŸããã¢ããªã±ãŒã·ã§ã³ãèµ·åããåã«ããã¹ãŠã®æºåã¢ã¯ã·ã§ã³ãå®è¡ããå¿ èŠããããŸãã ã¹ãã¬ãŒãžã€ã³ã¹ã¿ã³ã¹ãäœæããããŒã«ã«ã¹ãã¬ãŒãžãããŒãããŸãïŒãããã¯ãŒã¯ãžã®ã¢ã¯ã»ã¹ã«é¢ä¿ãªãåäœããŸãïŒãã³ãŒã«ããã¯ãæå®ããåŸãããŒãåŸã«UsersApp.Utils.pingã¡ãœãããåŒã³åºããŠãããã¯ãŒã¯ã®å¯çšæ§ã確èªããŸãã pingé¢æ°ã¯ããµãŒããŒäžã®ãã¡ã€ã«ã«Ajaxã«ãªã¯ãšã¹ããéä¿¡ããæåããå Žåã¯successbackã³ãŒã«ããã¯é¢æ°ãåŒã³åºããŸãããã以å€ã®å Žåã¯å€±æãåŒã³åºãããŸãã
ãããã£ãŠããããã¯ãŒã¯ãããå ŽåãããŒã«ã«ã¹ãã¬ãŒãžãšã³ããªããµãŒããŒã¹ãã¬ãŒãžã«è¿œå ããããã®åŸããŒãã«ã¹ãã¬ãŒãžããµãŒããŒã«ã€ã³ã¹ããŒã«ãããŸãã ãããã¯ãŒã¯ããªãå ŽåãããŒãã«ã¹ãã¬ãŒãžã¯åã«ããŒã«ã«ã¹ãã¬ãŒãžã«ã€ã³ã¹ããŒã«ãããŸãã
äœåã®äŸã¯ãã¡ããã芧ãã ãã ã ãœãŒã¹ïŒPHPã®ãµãŒããŒåŽãšããŠãJavaã§èšè¿°ããŸãã-å¿ èŠãªå Žåã¯æçš¿ããŸãïŒã¯ãã¡ã ã
PSã æ°ããRustaveliã¢ã«ãã ã®æ奜家-ãããŠããªãã«æããå¬ã®ããã°ã©ããŒã®å€:)