私はextjsとinfovisが初めてです。2 つのコンポーネントを持つページを実装しようとしています。上部は、サーバーから受信したデータによってレンダリングされる extjs グリッドです-> extjs ストア。同じデータによってレンダリングされるスペースツリーである下位コンポーネントが必要です。さらに、グリッド上のイベントをリッスンし、スペース ツリーで選択したノードをマークする必要があります。extjs と infoVis の統合の例はありますか?
1 に答える
0
はい、extjsを使用してスペースツリーをアプリに正常に統合しました。以下の私の例は、ツリーをウィンドウにプロットします(そして、わかりやすくするために大幅に編集されています)が、うまくいけば、それがあなたにアイデアを与えるでしょう。ここでの主なアイデアは、ランダムなIDでdivを動的に作成し、そのdivをパネルにアタッチしてレンダリングすることです。その後、divのIDをスペースツリー初期化のinjectIntoパラメーターに渡すことができ、STがextjsコンポーネントに描画されます。
STは、実際にはウィンドウに関連付けられて外部から呼び出されるdoRefresh関数で初期化されることに注意してください。私の例では、jquery postを使用してサーバーから直接データを取得しています。実装では、グリッドで同様のことを行うことができます。ストアでイベントをリッスンし、スペースツリーの親コンポーネントで更新関数を呼び出すだけです。
function createSpacetreeWindow() {
var win = Ext.create('Ext.window.Window', {
title: ' Window Title',
id: windowId,
height: 600,
maxheight: 600,
width: 1000,
layout: {
type: 'anchor',
align: 'stretch'
},
doRefresh: function () {
var existing = Ext.getCmp('panel_' + divid);
if (existing) {
existing.destroy();
}
var newdivid = randomString();
var divA = document.createElement("div");
divA.setAttribute("id", newdivid);
divA.setAttribute("class", "repoPathView");
win.add({
id: 'panel_' + divid,
xtype: 'panel',
height: 600,
width: 1000,
layout: 'fit',
contentEl: divA
});
loadSpaceTree(newdivid, repPathId);
}
});
win.show();
win.doRefresh();
}
function loadSpacetree(divid, rpId) {
// retrieve the data via jquery POST.
var url = GetSpacetreeUrl();
$.post(url, { myId: rpId }, function (data) {
//Create a new ST instance
var st = new $jit.ST({
injectInto: divid,
duration: 100,
transition: $jit.Trans.Quart.easeInOut,
levelDistance: 50,
offsetX: 350,
constrained: false,
siblingOffset: 100,
levelsToShow: 100,
Navigation: {
enable: true,
panning: true
},
Node: {
type: 'networkelement',
overridable: true
},
Edge: {
type: 'bezier',
overridable: true,
lineWidth: 2,
color: '#4CC417'
}
});
//load json data
st.loadJSON(data);
st.compute();
//emulate a click on the root node.
st.onClick(st.root);
});
}
于 2013-01-25T21:26:13.643 に答える