2014-02-20 47 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 –