我是Dojo的新手(事實上,所有的前端編程,我一直在Java和C#的服務器端工作多年)。我目前正在使用Java Server Faces(JSF)2.1,並嘗試使用JSF和Dojo Grid(dgrid)與Dojo 1.8進行簡單演示。我有一個來自dgrid站點的示例,演示瞭如何使用甘特圖進行工作,但此示例未顯示如何從應用程序服務器提取JSON數據並將其提供給函數。問題在於我很難將自己的大腦包裹在ARM上 - 我希望有一些經驗可以幫助減輕我的一些痛苦。下面是一些代碼:使用Dojo 1.8函數在JSF ajax上執行結果
這是我創建的HTML文件,加載時,它只是創建甘特圖:
<script>
require([ "gantt/GanttGrid", "gantt/data" ], function(GanttGrid, data){
// Instantiate the GanttGrid using predefined test data
new GanttGrid({
store: data,
query: {
// Only tasks with no parent task should be displayed in the root of the chart
parent: undefined
}
}, "gantt");
});
</script>
「數據」是從一個單獨的js文件拉,只是JSON數據在咕嚕咕嚕到Dojo的內存對象:
define(["dojo/store/Memory"],function(Memory){
return new Memory({data:[
{name: "100", start: 1327900000000, end: 1328300000000, completed: 0.9, id: 1},
{name: "101", start: 1328100000000, end: 1328400000000, completed: 0.9, id: 2},
{name: "102", start: 1329100000000, end: 1329800000000, completed: 0.4, dependencies:[1], id: 3},
{name: "103", start: 1328400000000, end: 1328900000000, completed: 0.4, dependencies:[1], id: 4},
{name: "104", start: 1329000000000, end: 1329800000000, completed: 0.4, id: 5},
{name: "105", start: 1329000000000, end: 1329400000000, completed: 0.4, id: 6},
{name: "106", start: 1329400000000, end: 1329800000000, completed: 0.4, id: 7}
],
getChildren: function(parent, options){
return this.query({parent: parent.id}, options);
},
mayHaveChildren: function(parent){
return parent.hasChildren;
}
});});
現在,我要的是能夠調用託管Bean的方法的JSF將執行在後端的一些邏輯,然後返回JSON數據,我可以添加到Dojo的內存存儲並將其傳遞到GanttGrid,但是,我似乎無法弄清楚如何用ajax請求來關閉它。
以下是我在我的XHTML文件從豆成功獲取數據,並將其顯示在屏幕上:
<fieldset>
<h:form id="schedulerForm">
<h:commandButton value="Execute Demo" id="executeDemo">
<f:ajax event="click" listener="#{autoScheduler.executeDemo}" render="result" />
</h:commandButton>
<p />
<h:outputText id="result" value="#{autoScheduler.result}" />
</h:form>
</fieldset>
我想什麼是捕捉executeDemo的結果對JSF豆傳遞給創建GanttGrid的函數。我曾嘗試在DOJO中使用「on」功能,但只允許我捕獲按鈕單擊(從我所知道的情況來看)......我無法想出一種方法來知道執行何時完成,以便我可以從bean獲取數據並創建圖表。最大的問題是我無法弄清楚如何使用DOJO請求模塊來調用JSF bean。
我希望有人知道一個簡單的方法來實現這一點。提前感謝您的幫助!如果您需要更多信息,請告訴我...我試圖包含所有相關的代碼。
-Paul
謝謝埃利亞斯,這是有益的,但並沒有解決我的問題(我不認爲)。我基本上有這個,我使用onevent觸發JS函數,但我遇到的問題是DOJO和ARM體系結構。它全部封裝起來,所以我不能只調用一些DojoGridFunction(數據) - 它都在範圍外的「require」塊中運行。我能夠通過使這個調用窗口暴露一些函數「全局」來解決一個解決方案.GanttGrid = GanttGrid;在「要求」塊內。然後,我從香草JS訪問GanttGrid,但這不是他們的意圖。我正在努力保持對他們的拱門的忠誠。 – PaulP1975 2013-03-21 13:17:20
@ PaulP1975嗯...對不起,男人,我不認爲我可以幫助你的問題的道場部分,我從來沒有用過它。也許你會有更好的運氣來問一個專門的Dojo問題。我希望我至少幫助澄清了它的JSF位。 :) – elias 2013-03-21 14:08:43
Elias,它絕對有助於我理解JS的本質,我感謝您花時間提供詳細的答案。我能夠通過全局暴露我的函數來解決Dojo問題(我發現我可以將它寫成全局的,但是這是爲了使用它們的解析函數)。我所做的並不是Dojo 1.8的聲音,但現在已經足夠了(它只是一個原型)。我在回答你的回答是一個答案,因爲我不認爲我會得到一個完整的答案!感謝你的寶貴時間! – PaulP1975 2013-03-22 14:04:52