我是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