2011-12-08 13 views
2

私は、タイムスタンプ付きメッセージを保存して表示する簡単なアプリケーションを作成しています。私はこれらのメッセージを記述するためのモデルを持っているExtJS:グリッドとチャートの間でストアを共有する

{ 
    "emitted": "2011-12-08 12:00:00", 
    "message": "This is message #666" 
} 

Ext.define('Message', { 
    extend: 'Ext.data.Model', 
    fields: [ 
     { name: 'emitted', type: 'date' }, 
     { name: 'message', type: 'string' } 
    ] 
}); 

私は、グリッド内のこれらのメッセージを表示する問題がないメッセージが含むJSONオブジェクトである、のような2つの主なフィールドは言います。しかし、私は今、これらのメッセージをグラフに表示したいと思います。たとえば、上記の例では#666のように数字をつかんで折れ線グラフを表示することができます。

理想的には、グラフの新しいストアを作成したくない、同じメッセージストアを再利用したいが、フィールドにフィルタを適用して適切な値を取得する。私はよく分からないかもしれません。

var chart = { 
    xtype: 'chart', 
    ... 
    series: [{ 
     type: 'line', 
     axis: ['left', 'bottom'], 
     xField: 'emitted', 
     yField: {fieldName:'message', fieldGrabber: function(v) { 
      new RegExp("This is message #(\d+)$", "g").exec(v)[1] 
     }} 
    }] 
}; 

ExtJSではこのようなことができますか? 私は何をしようとしているのか説明しようとしましたが、そのような機能をどこで見つけるか分かりません:チャートクラス、ストアクラス、または種類豊富なpfプロキシを使っています。

サイドノート: データをサーバーに正しくフォーマットするように要求することはできません。私が受け取ったメッセージはどこにもバックアップされていません。それはsocketIO経由でクライアントにストリーミングされたライブイベントだけです。

アドバイスありがとうございます。

+0

あなたは、私は以来、撤回してきた私の答えは、このコメントをした:「私が受け取るメッセージはどこにもバックアップされていない、彼らは生きていますsocketIOを介してクライアントにストリーミングされたイベント "これはあなたを助けるために非常に重要な情報です。 ExtJSを設定するだけではなく、ExtJSの基礎となるJavascript言語に大きく依存しているカスタムソリューションが必要であることを忠告してください。 –

答えて

-1

私はHighchartsに切り替えてゴミ箱に出ExtJSのを投げた:P

1

あなたが別のフィールドにモデルの内側にあなたが値を抽出する必要があります

Ext.define('Message', { 
    extend: 'Ext.data.Model', 
    fields: [ 
     { name: 'emitted', type: 'date' }, 
     { name: 'message', type: 'string' }, 
     { name: 'nr', convert: function(v, r){ 
      return r.get('message').replace(/^.*#/, ''); 
     } } 
    ] 
}); 

それとも、単に「NR」フィールドを持ち、これがある」として、それを表示するグリッド内のレンダラを使用したほうが良いかもしれませんメッセージ#{nr} "。

次に、 'nr'フィールドを直接チャートに使用することができます。

+0

これは良い解決策ではありません。モデルは私のデータを純粋に表現しているはずなので、私は実際にビューを満足させるために仮想フィールドでそれを汚染したくはありません。 (私には1つのモデルがあり、それを表示するために多量のグラフがある)。 – NewbiZ

関連する問題