Javascript 数据源查询回调问题(调用顺序、更改全局变量的能力)
我已将代码简化为以下简短示例。在其中,我想查询一组迭代,然后在回调中,循环迭代并对资源求和。有一个全局变量,我想在其中存储和。。。但我不能让它工作 具体的问题是查询(和相关联的回调)是在其他处理之后运行的Javascript 数据源查询回调问题(调用顺序、更改全局变量的能力),javascript,web-services,rally,Javascript,Web Services,Rally,我已将代码简化为以下简短示例。在其中,我想查询一组迭代,然后在回调中,循环迭代并对资源求和。有一个全局变量,我想在其中存储和。。。但我不能让它工作 具体的问题是查询(和相关联的回调)是在其他处理之后运行的 <html><!-- COMMENT --> <meta name="Name" content="YOUR APP NAME HERE" /> <meta name="Version" content="0.1" />
<html><!-- COMMENT -->
<meta name="Name" content="YOUR APP NAME HERE" />
<meta name="Version" content="0.1" />
<meta name="Vendor" content="YOUR COMPANY NAME HERE" />
<!-- Rally SDK --> <script type="text/javascript" src="/apps/1.25/sdk.js"></script>
<!-- App script --> <script>
var rallyDataSource; var resourceSum = -1;
function ProcessIterations(results) {
alert("In ProcessIterations");
var resourceSum = 0;
for (iIter = 0; iIter < results.iterations.length; iIter++) {
var iteration = results.iterations[iIter] ;
resourceSum += iteration.Resources;
}
alert("In ProcessIterations, resourceSum="+resourceSum); }
function queryError () {
alert("A query error occurred"); }
function runMainQuery() { var today = dojo.date.stamp.toISOString(new Date(), {milliseconds: true, zulu: true});
var queryObject = {
key: "iterations",
type: "Iteration",
fetch: "Name,ObjectID,Resources,Project",
order: "EndDate asc",
query: "(Project.ObjectID != \"__PROJECT_OID__\")"
};
rallyDataSource.findAll(queryObject, ProcessIterations, queryError); }
function Main() { rallyDataSource = new rally.sdk.data.RallyDataSource("__WORKSPACE_OID__", "__PROJECT_OID__",
"__PROJECT_SCOPING_UP__", "__PROJECT_SCOPING_DOWN__");
runMainQuery() ;
var tableConfig = {
'columnKeys' : ['planEst'],
'columnHeaders': ['Plan Estimate'] }; var table = new rally.sdk.ui.Table(tableConfig); table.setCell(0,0,resourceSum) ; table.display("app_div");
}
rally.addOnLoad(Main);
</script> <body>
<div id="app_div"></div>
<div id="error_div"></div> </body> </html>
var rallyDataSource;var resourceSum=-1;
函数ProcessIterations(结果){
警报(“进程内迭代”);
var-resourceSum=0;
对于(iIter=0;iIter
要想掌握异步回调的诀窍可能有点棘手,但你已经非常接近了。
基本上,如果您只是在ProcessIterations回调中将表的创建从Main移动到up,您应该会做得很好:
function ProcessIterations(results) {
alert("In ProcessIterations");
var resourceSum = 0;
for (iIter = 0; iIter < results.iterations.length; iIter++) {
var iteration = results.iterations[iIter] ;
resourceSum += iteration.Resources;
}
alert("In ProcessIterations, resourceSum="+resourceSum); }
var tableConfig = {
'columnKeys' : ['planEst'],
'columnHeaders': ['Plan Estimate'] };
var table = new rally.sdk.ui.Table(tableConfig);
table.setCell(0,0,resourceSum) ;
table.display("app_div");
}
function Main() {
rallyDataSource = new rally.sdk.data.RallyDataSource("__WORKSPACE_OID__", "__PROJECT_OID__",
"__PROJECT_SCOPING_UP__", "__PROJECT_SCOPING_DOWN__");
runMainQuery() ;
}
函数过程迭代(结果){
警报(“进程内迭代”);
var-resourceSum=0;
对于(iIter=0;iIter
这样,在从rallyDataSource.findAll调用获得数据并计算resourceSum之前,您不会显示表
作为附加资源,请参阅我们帮助文档中有关使用RallyDataSource和异步回调的一些示例:
我知道,如果表呈现是从回调中发出的,那么事情就会发生。事实上,我是故意用这种方式来了解问题的。查询。在我们这个特殊(更复杂)的例子中,我们实际上有一个初始查询(对于迭代/项目),在它的回调中我们做了两件事:添加表项并发出另一个查询(对于迭代/项目中的故事),谁的回调生成了额外的表项(所有计划估计的总和),初始查询结果集中的每个项一次。我们无法从两个嵌套查询中生成表项。听起来您的回调链接正确。等待调用table.display(),直到添加了所有数据可能会有所帮助。。。您也可以随时发布另一个带有更完整代码的问题。