javascript - 数据源查询回调问题(调用顺序、改变全局变量的能力)

标签 javascript web-services rally

我已将我的代码缩减为以下简短示例。在其中,我想查询一组迭代,然后在回调中循环遍历迭代并对资源求和。有一个全局变量,我想在其中存储总和......但我无法让它工作。

具体问题是查询(和关联的回调)在其他处理之后运行。

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

最佳答案

掌握异步回调的窍门可能有点棘手,但您真的很接近了。 基本上,如果您只是在 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() ;
}

这样,在您的 rallyDataSource.findAll 调用中的数据可用并且您的 resourceSum 已被计算之前,您不会显示您的表格。

作为附加资源,请查看我们帮助文档中有关使用 RallyDataSource 和异步回调的一些示例: http://developer.rallydev.com/help/rally-data-source

关于javascript - 数据源查询回调问题(调用顺序、改变全局变量的能力),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8013102/

相关文章:

javascript - MVC4,使用 jQuery 在对话框中呈现局部 View ,如何刷新

java - 如何使用 Rally 的 JAVA API 将标签添加到 Rally 中的测试用例?

asp.net - 使用Elmah处理Web服务中的异常

php - Android,使用 PHP : Null Pointer exception 连接到 MySQL

android - 在 android 中使用异步任务调用 Web 服务?

c# - 如何使用 Rally Api 和 .NET 在特定工作区和项目中创建用户故事

rest - 无法使用对指定测试集的引用来创建/更新 Rally TestCaseResult

javascript - 引用错误 : Chart is not defined - chartjs

javascript - 未捕获的 TypeError javascript 无法读取属性 '' 用户名'

javascript - Rails 正在渲染部分 View ,而它应该只更新现有页面中的部分 View