2014-02-20 46 views
1

我有一个拉力赛应用程序,需要相当多的加载时间,它有一些包含数据存储的循环。我需要找到应用程序完成加载的条件。一旦应用程序的执行完成,我想刷新我的页面。是否有像onLoad(),我可以用来通知该应用程序已完全加载,然后我可以在底部添加window.location.reload拉力赛应用程序onLoad

回答

4

我会建议使用回调函数,单个数据存储或多个数据存储的一系列承诺。前者是非常简单的,但是这是怎么了,我通常处理后:

在这种情况下,我同时加载所有的用户故事,缺陷和测试用例在当前范围内,那么当所有记录已成功加载,将调用“成功”功能。

launch: function() { 
    Deft.Promise.all([ 
     this.loadRecords('UserStory'), 
     this.loadRecords('Defect'), 
     this.loadRecords('TestCase') 
    ]).then({ 
     success: function(recordSets) { 
      // recordSets = [ 
      // UserStoryRecords, 
      // DefectRecords, 
      // TestCaseRecords 
      // ]; 
     }, 
     failure: function() { 
      //Handle error loading the store here... 
     } 
    }); 
}, 

loadRecords: function(model) { 
    var deferred = Ext.create('Deft.Deferred'); 
    Ext.create('Rally.data.WsapiDataStore', { 
     limit : Infinity, 
     model : model, 
     fetch : ['Name','ObjectID'] 
    }).load({ 
     callback : function(records, operation, success) { 
      if (operation.wasSuccessful()) { 
       deferred.resolve(records); 
      } else { 
       deferred.reject(); 
      } 
     } 
    }); 
    return deferred.promise; 
} 

希望这有助于!

+0

嗨,感谢您的回复,我有一个链接的数据存储的链接,我将结果从一个数据存储传递到下一个数据存储,必须以同步方式完成。第一个数据存储位于for循环内。我希望在for循环完全执行时调用end()函数。但这不是那种方式。 –

+0

我使用'Deft.Promise.all'来并行加载商店,但您可以轻松地串行执行此操作。由于您将一个商店结果传递给另一个商店,我会查看“Deft.Chain.pipeline”的文档。 http://docs.deftjs.org/deft-js/0-8-0/#!/api/Deft.promise.Chain-method-pipeline –