0

D3 を使用して、Json データ ソースから ExtJs コンポーネントにレンダリングしています。

test.html から:

<html>
    <head>
        <title>Test</title>
        <script type="text/javascript" src="http://mbostock.github.com/d3/d3.js"></script>
        <script type="text/javascript" src="http://docs.sencha.com/ext-js/4-0/extjs/ext-all.js"></script>
        <script type="text/javascript" src="Test.js"></script>
    </head>
    <body>
        <script type='text/javascript'>
            Ext.onReady(function(){
                Ext.create('Ext.panel.Panel',
                {
                    layout: 'fit',
                    renderTo: Ext.getBody(),
                    items: [
                        {
                            xtype: 'panel',
                            html : 'There should be a test below this'
                        },
                        {
                            id: 'testPanel',
                            xtype: 'xxxviewtest'
                        }
                    ]
                });
                d3.json("Test1.json", function(json) { Ext.getCmp ('testPanel').deliverJson (json); });
            });
        </script>
    </body>
</head>

および Test.js:

Ext.define('xxx.view.Test', {
    extend: 'Ext.Component',
    alias: 'widget.xxxviewtest',

    deliverJson: function(json) {
        var target = d3.select("#" + this.id);
        if (target[0][0]) {
            // install svg element and draw
            ...
        }
    }
});

単純なテスト ケースでは問題なく動作しますが、タブ パネルと多数の UI コンポーネントを含むより複雑なドキュメント ケースでは、Test.js で d3.select を呼び出すと、空の選択が返されます。

これが正しく機能するためには、何をする必要がありますか?

4

1 に答える 1

1

「Test.js の d3.select が空の選択を返している」場合は、その時点で、クエリした Ext コンポーネントが完全に表示されていないと思います。d3.json(...)そのため、1 つの可能性を排除するために、をrenderイベントのハンドラーに移動することをお勧めします。それでも問題が発生する場合は、別の方法を見つけます。

于 2012-05-03T04:05:27.883 に答える