2012-12-28 63 views
0

我是JavaScript和Sencha的新手,但熟悉as3/flex。我在as3中構建了類似的東西,但我很難將其移交給Sencha JS。
我有一個Ext.data.Store。此Ext.data.Store將根據所選日期的預定時間塊而變化。我需要能夠基於這些參數提取可用的2小時時間塊。Ext.data.Store中的可用時間段?

開始時間和結束時間以15分鐘爲增量,應該始終爲2小時。儘管Ext.data.Store中的某些預定時間可能大於2小時,或者更少,但我仍然需要能夠將2小時時間段顯示爲空閒時間。在Ext.data.Store中可能會看到重複的時間段,因爲時間表中有多個人。我正在考慮設置員工的某種循環,所以如果員工數爲3,則會循環訪問代碼3次以查找可用的2小時時間段。

我能夠看清物體 對象 員工: 「詹姆斯」 結束時間: 「10:00」 STIME: 「8:00」 :對象

但我不知道如何實現員工排序的所有時間段,然後在每個員工的時間段之間找到所有兩個小時的時間間隔。

Ext.onReady(function() 
{ 
console.log('ready!'); 

var constants = { 
'WORKDAY_START': '08:00', 
'WORKDAY_END': '18:00', 
'INTERVAL_HOUR_COUNT': 2 
}; 
Ext.define('Times', { 
    extend: 'Ext.data.Model', 
    fields:[ 
      {name: 'stime', type: 'string'}, 
      {name: 'endtime', type: 'string'}, 
      {name: 'employee', type: 'string'} 
      ] 
}) 



Ext.create('Ext.data.Store', { 
storeId: 'ac', 
model: 'Times', 
data : [ 
    {stime:"8:00", endtime:"10:00", employee:"james"},    
    {stime:"13:00", endtime:"15:00", employee:"james"}, 
    {stime:"15:00", endtime:"17:30", employee:"james"}, 
    {stime:"12:00", endtime:"14:00", employee:"carl"},    
    {stime:"14:00", endtime:"16:00", employee:"carl"}, 
    {stime:"14:00", endtime:"16:00", employee:"jimmy"} 
] 
}); 



function addZero(num) { 
      // Create an array, if string is in "xx:xx" format, the array  will be ["xx", "xx"], otherwise it will be ["xx"] 
      var i = new Number(); 
      var arr = String(num).indexOf(":") == -1 ? [num] : String(num).split(":"); 
      for (i = 0; i < arr.length; i++) // Add an "0" if the string is only one character 
      if (arr.length == 1){ 
      arr[i] = "0" + arr[i]; 
       } 
      return arr.join(":"); 
     } 







var ac = Ext.data.StoreManager.lookup('ac').data; 

var employeeTimeSlots = new Array(); 
ac.each(function(item, index, allItems) { 

//console.log("a[" +arrayItem+ "] = " + index); 
console.info(item.data); 

//console.log('@ready');  
      var timeSlot = new Array(); 

      for (timeSlot in item.data) { 

        var employeeSlots = new Array(); 
       var employee = timeSlot.employee; 
       if (!employeeSlots['employee']) employeeSlots['employee'] = []; 
       employeeSlots.push(['employee'],{ 
        stime: timeSlot.stime, 
        endtime: timeSlot.endtime 

       }); 
       //console.log(employeeSlots) 
       //console.log(timeSlot); 
      } 

// Second step, find all two hour intervals between each employee's time slot 

      /*for (var employee in employeeSlots) { 
       var employeeTimeSlots=Array(employeeSlots['employee']); 
       // Add in the first and last time stamps 
       employeeTimeSlots.unshift({endtime: constants.WORKDAY_START}); 
       employeeTimeSlots.push({starttime: constants.WORKDAY_END}); 
       // Find all the time differences 
       for (var i = 0; i < employeeTimeSlots.length-1; i++) { 
        // The end hours of the current time slot 


        var endDate = new Date(0, 0, 0, employeeTimeSlots[i].endtime.substring(0, 2), 
         employeeTimeSlots[i].endtime.substring(3, 2), 0, 0); 
        // The beginning hours of the next time slot 
        var nextStartDate = new Date(0, 0, 0, employeeTimeSlots[i+1].starttime.substring(0, 2), 
         employeeTimeSlots[i+1].starttime.substring(3, 2), 0, 0); 
        // The hours in between the time slots 
        var availableHours = Number((nextStartDate.getTime() - endDate.getTime()))/(1000 * 60 * 60); 
        // For every two hours that are available between these time slots 
        for (var hourInterval = 0; availableHours - hourInterval >= constants.INTERVAL_HOUR_COUNT; hourInterval += constants.INTERVAL_HOUR_COUNT) { 
         // Trace the available time slot 
         trace(employeeName, "=", addZero((endDate.hours + hourInterval) + ":" + endDate.minutes), 
          "to", addZero((endDate.hours + hourInterval + constants.INTERVAL_HOUR_COUNT) + ":" + endDate.minutes)); 
        } 

      } 
        }*/ 




}); 
+0

那麼,什麼是你的問題? – sra

回答

0

您可以按字段或多個字段排序商店。

如果你的店的MyStore命名,你將有

mystore.sort('employee','ASC') 

從技術文檔,我們有:

//sort by a single field 
myStore.sort('myField', 'DESC'); 

//sorting by multiple fields 
myStore.sort([ 
{ 
    property : 'age', 
    direction: 'ASC' 
    }, 
    { 
     property : 'name', 
     direction: 'DESC' 
    } 
]);