数据源查询回调问题(调用顺序,改变全局变量的能力)
Data source query callback problems (call order, ability to change global variables)
我将代码简化为以下简短的示例。在其中,我想查询一组迭代,然后在回调中,循环遍历迭代并对资源求和。有一个全局变量,我想在其中存储总和…但我做不到
具体的问题是查询(和相关的回调)是在其他处理之后运行的。
<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>
要掌握异步回调的窍门可能有点棘手,但你真的很接近了。基本上,如果你只是把你的表的创建从Main移动到ProcessIterations回调中,你应该很好:
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() ;
}
这样,在从rallyDataSource获得数据之前不会显示表。
作为一个额外的资源,检查我们的帮助文档中使用RallyDataSource和异步回调的一些例子:http://developer.rallydev.com/help/rally-data-source
相关文章:
- 全局变量和全局对象的属性之间有什么区别吗
- 在Javascript中,全局变量不会改变函数中的值
- 为什么全局变量没有改变
- JavaScript全局变量在改变后会恢复到初始值
- 声明一个没有'var'让它成为一个全局变量或者只是改变它的值
- 我如何改变全局变量的值
- 我不能改变setInterval内的全局变量
- Javascript全局变量类型改变
- 全局变量在按下按钮时没有改变(作用域问题)
- jQuery函数不会改变全局变量,而常规javascript函数会
- 数据源查询回调问题(调用顺序,改变全局变量的能力)
- 使用属性来改变javascript插件中的全局变量
- 如何从全局范围改变私有变量?这可能吗?
- 如何改变这个Javascript不使用全局变量
- 全局变量的值改变了,javascript
- 如何通过用户(输入字段)改变函数内全局变量的值
- 为什么不改变函数内部的全局变量?
- Javascript全局变量没有改变?
- 全局变量在javascript (Cordova/Phonegap)中没有被改变
- Javascript全局变量不会改变