0

でセットアップdojoConfigするとレンダリングされませんが、使用するとasync: trueすべて正常に動作します。しかし、AJAX長時間ポーリングを使用できるようにするためのモードが必要です。コントロールがレンダリングされるように、この問題を解決するにはどうすればよいですか?DateTextBoxasync: falseasync

これが私のコードです:

<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="dijit/themes/claro/claro.css">
<style>
html, body {
    height: 100%;
    margin: 0;
    overflow: hidden;
    padding: 0;
}
</style>
<script>dojoConfig = {async: true}</script>
<script src='dojo/dojo.js'>
</script>
<script>
require(["dojo/ready", "dijit/form/Button", "dojo/dom", "dijit/registry"], function(ready, Button, dom, registry){
    ready(function(){
        // Create a button programmatically:
            var myButton = new Button({
                label: "button"
            }, "topButton");
    });
});


require(["dojo/ready", "dijit/form/Button", "dojo/dom"], function(ready, Button, dom){
    ready(function(){
        // Create a button programmatically:
        var myButton = new Button({
            label: "button"
        }, "leftButton");
    });
});

require(["dojo/ready", "dijit/form/DateTextBox", "dojo/dom", "dojo/parser"], function(ready, DateTextBox, dom, parser){
    ready(function(){
        // Create a button programmatically:
        var dateTextBox = new DateTextBox({
            value: new Date(2009, 0, 20)
        }, "centerPicker");
    });
});

require(["dojo/ready", "dijit/form/Button", "dojo/dom"], function(ready, Button, dom){
    ready(function(){
        // Create a button programmatically:
        var myButton = new Button({
            label: "button"
        }, "bottomButton");
    });
});

require(["dojo/ready", "dijit/registry", "dijit/layout/BorderContainer", "dijit/layout/ContentPane"],
        function(ready, registry, BorderContainer, ContentPane){
            ready(function(){
                var appLayout = new BorderContainer({
                    design: "headline"
                }, "appLayout");
                 
                appLayout.addChild(
                    new ContentPane({
                        region: "top",
                        content: registry.byId("topButton")
                    })
                );
                appLayout.addChild(
                    new ContentPane({
                        region: "left",
                        content: registry.byId("leftButton")
                    })
                );
                appLayout.addChild(
                    new ContentPane({
                        region: "center",
                        content: registry.byId("centerPicker")
                    })
                );
                appLayout.addChild(
                    new ContentPane({
                        region: "bottom",
                        content: registry.byId("bottomButton")
                    })
                );
                 
                // start up and do layout
                appLayout.startup();
            });
        });
</script>
</head>
<body class="claro">
<style>
html, body {
    height: 100%;
    margin: 0;
    overflow: hidden;
    padding: 0;
}

#appLayout {
    height: 100%;
}
</style>
<div id="appLayout" class="demoLayout"></div>
<button id="topButton" type="button"></button>
<button id="leftButton" type="button"></button>
<div id="centerPicker"></div>
<button id="bottomButton" type="button"></button>
</body>
</html>
4

1 に答える 1

1

依存関係のレイヤーを構築すると、この問題はなくなります。問題は、DateTextBox が BorderContainer よりも多くの依存関係を持っていることです。したがって、requireinputelement のダウンロードrequireは、レイアウトの ..

これにより、dojo.ready は、期待していたものとは異なる「間違った」方法でコールバックをキューに入れます。.ready には、すべての依存関係がダウンロードされたら呼び出す関数のリストがありますが、スクリプトがキューに入れる方法で順序付けられています。

これを克服するには、「ミューテックス」を使用できます。これは、いくつかの奇妙な状況では、設計の必要に応じて注文キューに入れられる可能性があるためです。次のようなロジックを作成する必要があります。

  1. region:center で ContentPane に ID を指定します。
  2. if registry.byId(centerPicker) != undefined: centerRegionContentPane.addChild(registry.byId(centerPicker))レイアウトセクションで。
  3. If registry.byId(centerRegion) != undefined: registry.byId(centerRegion).addChild(centerPickerWidget)日付ボックスセクションの下。
于 2012-10-04T19:46:22.297 に答える