dojo.read or dojo.addOnLoad
ajaxでjsonさ、読んで、それをdata APIにしてgridに渡して描写する。
下のコードでどうもItemFileReadStoreをインスタンス化するときにReferenceTypeエラーが出る。右往左往するが治らない。
debugger;でステップ実行してもわからない。
試しに、dojo.readyの外で
var chart = new ItemFileReadStore( );
をしてみた。
ItemFileReadStoreはundefinedって怒られた。
あっ、じゃ
dojo.data.ItemFileReadStoreでやったら、それでもundefinedってなった。
あれっ、俺はItemFileReadStoreのインスタンス化中に問題発生、
つまりパラメタに原因があるとばっかり思ってたが、
単純にItemFileReadStoreがundefinedだってさ。
となると、その文が実行される時点でItemFileReadStoreが
読み込まれてないだばべさ。
これが問題解決に直結する糸口だすた。
だったら、エラーで最初からreferenceError to ItemFileReadStor
eみたいなことを言えよな!
だからweb系はとっつきにくい。まぁ、俺が知識不足だからこんな
やりにくさを感じるんだろう。くそっ、知識を増やそう!
ま、っとにかく
dojoが読み込まれてないってので、ピンときて
dojo.readyをaddOnLoadに変えてみた。そしたら一発よ!
ちなみにdojo.readyのままで実行してdebugger consoleから
new dojo.data.ItemFileReadStore()ってやったらインスタンス化
されたよ!加えて、オブジェクト補完もしてくれる。こまったらdebugger consoleで色々試すことを覚えた。debugger console=F12 =firebug, chrome.
以下、下は修正前、その下が修正後。thanks
dojo.ready(function (){ //var chart = new ItemFileReadStore( ); btn1 = dojo.byId("btn1"); dojo.connect(btn1, "onclick", null, function(ev) { dojo.xhrGet({    url:"../../../../tournament_view.json",    handleAs: "json",    load: function(data){      console.log("res=", data);      var itemdata = data.chart.rows;            var data = { items: [{ name:'Mexico City', type:'city', population:'19 million', timezone:'-6 UTC'}]};      //var chart = new dojo.data.ItemFileReadStore();      //var chart = new ItemFileReadStore( {data :{ items : itemdata }});      var grid = dijit.byId("myDataGrid");      grid.setStore(chart);      alert("called");    },    error: function(error) {      console.warn(new Error().stack);    }  }); }); });
<script type="text/javascript"> dojo.addOnLoad(function (){ btn1 = dojo.byId("btn1"); dojo.connect(btn1, "onclick", null, function(ev) { dojo.xhrGet({ url:"../../../../tournament_view.json", handleAs: "json", load: function(data){ console.log("res=", data); var itemdata = data.chart.rows; debugger; var data = { items: [{ name:'Mexico City', type:'city', population:'19 million', timezone:'-6 UTC'}]}; var chart = new dojo.data.ItemFileReadStore({ data : {} }); //var chart = new dojo.data.ItemFileReadStore(); //var chart = new ItemFileReadStore( {data :{ items : itemdata }}); var grid = dijit.byId("myDataGrid"); grid.setStore(chart); alert("called"); }, error: function(error) { console.warn(new Error().stack); } }); }); }); </script>