1

編集済み 私は縦棒グラフ用に提供されているSenchaタッチチャートサンプルを使用しています。コードは以下の通りです

new Ext.chart.Panel({
    fullscreen: true,
    title: 'Column Chart',
    dockedItems: [{
        xtype: 'button',
            iconCls: 'help',
            iconMask: true,
            ui: 'plain',
            handler: onHelpTap
        }, {
            xtype: 'button',
            iconCls: 'shuffle',
            iconMask: true,
            ui: 'plain',
            handler: onRefreshTap
        }],
        items: {
            cls: 'column1',
            animate: {
                easing: 'bounceOut',
                duration: 750
            },
            store: window.store1,
            shadow: false,
            gradients: [{
                'id': 'v-1',
                'angle': 0,
                stops: {
                    0: {
                        color: 'rgb(212, 40, 40)'
                    },
                    100: {
                        color: 'rgb(117, 14, 14)'
                    }
                }
            },
            {
                'id': 'v-2',
                'angle': 0,
                stops: {
                    0: {
                        color: 'rgb(180, 216, 42)'
                    },
                    100: {
                        color: 'rgb(94, 114, 13)'
                    }
                }
            },
            {
                'id': 'v-3',
                'angle': 0,
                stops: {
                    0: {
                        color: 'rgb(43, 221, 115)'
                    },
                    100: {
                        color: 'rgb(14, 117, 56)'
                    }
                }
            },
            {
                'id': 'v-4',
                'angle': 0,
                stops: {
                    0: {
                        color: 'rgb(45, 117, 226)'
                    },
                    100: {
                        color: 'rgb(14, 56, 117)'
                    }
                }
            },
            {
                'id': 'v-5',
                'angle': 0,
                stops: {
                    0: {
                        color: 'rgb(187, 45, 222)'
                    },
                    100: {
                        color: 'rgb(85, 10, 103)'
                    }
                }
            }],
            axes: [{
                type: 'Numeric',
                position: 'left',
                fields: ['wins'],
                minimum: 0,
                maximum: 10,
                label: {
                    renderer: function (v) {
                        return v.toFixed(0);
                    }
                },
                title: 'Wins'
            },
            {
                type: 'Category',
                position: 'bottom',
                fields: ['School'],
                title: 'School'
            }],
            series: [{
                type: 'column',
                axis: 'left',
                highlight: true,
                renderer: function (sprite, storeItem, barAttr, i, store) {
                    barAttr.fill = colors[i % colors.length];
                    return barAttr;
                },
                label: {
                    field: 'wins'
                },
                xField: 'School',
                yField: 'wins'
            }],
            interactions: [{
                type: 'panzoom',
                axes: ['bottom']
            }]
        }
    });

}

編集済み: デバッガーでこれを確認すると、jsonデータを読み込めるようになりましたが、グラフが表示されません。これが私の更新されたコードです

Ext.regModel('Details', { fields: [{ name: 'School' }, { name: 'wins'}] });

// create the Data Store
window.store1 = new Ext.data.Store({
    model: 'Details',
    proxy: {
        type: 'scripttag',
        url: 'http://localhost:2650/AjaxWCFService.svc/GetDataset',
        reader: {
            root: 'data',
            type: 'json'
        }
    },
    autoLoad: true
});

私が何か間違ったことをしている場合、誰かが私に知らせてくれたらありがたいです。

古い投稿: json出力を使用してSencha縦棒グラフにバインドしています。私のコードは以下の通りです-

Ext.regModel('details', { idProperty: 'name', fields: ['School', 'wins'] });
// create the Data Store
window.store1 = new Ext.data.Store({
    model: 'details',
    autoLoad: true,
    proxy: {
        type: 'ajax',
        method: 'POST',
        url: 'http://localhost:2650/AjaxWCFService.svc/GetDataset',
        reader: {
            type: 'json',
            root: 'data'
        }
    },
    listeners: {
        load: function (obj, records) {
            Ext.each(records, function (rec) {
                console.log(rec.get('name'));
            });
        }
    } 
});

これは、URLから返されるjsonデータです

{
   data: [
       {School:'Dukes',wins:'3'},
       {School:'Emmaus',wins:'10'},
       {School:'Maryland',wins:'5'},
       {School:'Virginia',wins:'2'}
   ]
}

しかし、これはグラフを表示しません。代わりに、sencha-touch.jsファイルでjavascriptエラー「Uncaughttype error:Cannot read propertylenghtofundefined」が発生します。

json出力からのデータを直接ハードコーディングすると、機能します

window.store1 = new Ext.data.JsonStore({
    root: 'data',
    fields: ['School', 'wins'],
    autoLoad: true,
    data: [
        {School:'Dukes',wins:'3'},
        {School:'Emmaus',wins:'10'},
        {School:'Maryland',wins:'5'},
        {School:'Virginia',wins:'2'}
    ]
});

また、ExtDesignerからjsonStoreをロードすると、正常に動作します。Secha charts index.jsファイルに同じコードをコピーすると、機能しません。

誰かが私のコードで何が間違っているのか教えてもらえますか?

4

2 に答える 2

1

Sencha 関係者の助けを借りて、この問題を解決しました。ありがとうダン。解決策は次のとおりです。

  1. ファイル システムから JSON ファイルをロードすると問題が発生する場合があるため、Web サーバーでサンプルを実行してください。
  2. 以下のようにjsonデータを構造化します

    {
        "data": [
            {
                "School": "Dukes",
                "wins": "3"
            },
            {
                "School": "Emmaus",
                "wins": "10"
            },
            {
                "School": "Maryland",
                "wins": "5"
            },
            {
                "School": "Virginia",
                "wins": "2"
            }
        ]
    }
    
  3. 以下のデータストアを使用

    window.store1 = new Ext.data.Store({
        model: 'Details',
        proxy: {
            type: 'ajax',
            url: 'GetDataset.json',
            reader: {
                root: 'data',
                type: 'json'
            }
        },
        autoLoad: true
    });
    
于 2012-04-24T08:18:29.987 に答える
0

ここで推測していますが、以前に問題があったようです。問題はプロキシにあると思います。試す:

proxy: {
    type: 'rest',
    url: 'http://localhost:2650/AjaxWCFService.svc/GetDataset', 
    reader: {
        root: 'data'
    }

},

次に、プロキシのコールバック関数を定義する必要があります。いくつかの構成でエレガントな方法がありますが、私はそれを行う方法を正直に知りません、それで私はその時に別の解決策を見つけました、それはあなたのサービスが内部に返すJSONをラップすることです(彼らのようにここで行う):

Ext.data.JsonP.callback1();

それでもうまくいかない場合は、プロキシに以下を追加し、JSON応答の一部として「合計」を出力することも検討してください。

totalProperty: 'total'

しかし、これがまったく役に立たないと思うこと、そして私が持っている実用的なサンプルに基づいてこれらのアイデアを捨てていることを覚えておいてください。

これこれを読んでみてください。そして何よりも幸運なことに、それは私のヘッドメイトのトップのすべてです。この投稿もご覧ください。

それがあなたを正しい方向に向けてくれることを願っています。私が言ったように、私にはわかりません、これは私の最良の推測です。私はおそらく間違っています。

乾杯リバノフ

于 2012-04-19T01:37:00.723 に答える