2

これが私のソースコードです:

<script>
  function sendText(){
    require([ "dijit/form/Button", "dojo/_base/xhr"],
      function(Button,xhr) {

        xhr.post({
          url: "validURL1.html",
          form: dojo.byId("myForm"),
          load: function(data){
            var newStore = 
              new ItemFileWriteStore({url:'validURL2.html'});
            dijit.byId("grid").setStore(newStore);
          },
          error: function(error){
            alert("error!");
          }
        });
    });
  }
</script>

<button data-dojo-type='dijit.form.Button' onClick ='sendText()'>submit</button>

しかし、ボタンを押してデータをサーバーに投稿しようとすると、firebugは次のように言います。

_145は未定義です

では、私のコードの何が問題になっていますか?そして、エラー'_145'は何ですか?

アップデート

<script>

require([ "dijit/form/Button", "dojo/_base/xhr","dijit/form/Form",  "dojo/data/ItemFileWriteStore", 
          "dojo/dom-form","dijit/registry","dojo/ready", "dojox/grid/EnhancedGrid"],
        function(Button,xhr, Form, ItemFileWriteStore, domForm, registry,ready, EnhancedGrid) {
        var hasBeenSent = false;

        window.sendText = function() {

        xhr.post({
            url: "validURL1.html",
            form: dojo.byId("myForm"),
            handleaAs: "text",
            load: function(data) {
                var newStore = new ItemFileWriteStore({url:'validURL2.html'});
                dojo.byId("grid").setStore(newStore);
          },
          error: function(error){

            alert("error!");
          },
          handle: function() {

                hasBeenSent = true;
            }
        });

            }   
});
</script>

今それは言う:

TypeError: dojo.byId("grid").setStore is not a function

ただし、「enhancedGrid」が必要です。それで、多分私はいくつかの他のモジュールまたはクラスを必要とするべきですか?

4

2 に答える 2

1

dojoの圧縮/縮小バージョンを使用しています。これを行うアルゴリズムは、変数名を小さい名前(つまり、_145)に置き換えて、javascriptファイルのサイズを縮小します。

圧縮されたdojoファイルを見ると、次のことがわかりました。

function formToObject(_145){var ret={},_146=dom.byId(_145).elements;

私はそれdojo.byId("myForm")があなたのフォームを返さないと思います。

また、合成されていないファイルを使用できるように開発環境を設定することをお勧めします。これにより、ブラウザでのデバッグが向上します。

http://swingingcode.blogspot.com/2012/03/dojo-configurations.html

于 2012-06-06T11:12:41.730 に答える
1

dojo.byId( "grid")をdijit.byId( "grid")に変更します。これは、dojo.byId( "grid")を呼び出すと、ウィジェットではなくDOMNodeのみが返されるためです。

また、「グリッド」がマークアップ宣言である場合は、dojo.parser.parse()が実行されていることを確認してください。parseOnLoad:trueが設定されている場合は、dojo.readyが起動するのを待つ必要がありますdojo.ready(function() { require.... });require(["dojo/domReady!", ....], function(..) { XHR });

requireステートメント内の呼び出しのみがupdate-xhrである場合、最終的にこの構成はより適切に動作します。

require([
     "dojo/parser", // Pull in parser to manually run it if parseOnLoad is not set true
     "dijit/form/Button",
     "dojo/_base/xhr",
     ...
     "dojox/grid/EnhancedGrid",
     "dojo/domReady!" // Wait untill DOM is done loading and all of the dojo base has been prepared
   ], function(
      Parser,
      Button,
      ...
   ) {
        Parser.parse();
        var hasBeenSent = false;

        window.sendText = function() {

        xhr.post({
            url: "sample/update.html",
            form: dojo.byId("updateUser"),
            handleaAs: "text",
            load: function(data) {
                var newStore = new ItemFileWriteStore({url:'sample/userLissts.html'});
                dijit.byId("grid").setStore(newStore);
          },
          error: function(error){

            alert("error!");
          },
          handle: function() {

                hasBeenSent = true;
            }
        });

            }   
});
于 2012-06-06T14:23:45.220 に答える