2017-02-18 78 views
1

我試圖更新Telerik的甘特圖任務程序自動自動移動後續任務在劍道UI甘特

讓我們說,如果我繼續前進任務1提前一天就應該自動移動提前一天它的後續任務。

下面這個功能可以自動將所有後續任務但問題是,一旦我刷新頁面我的更改都將丟失,只有我感動的任務被保存。不堅持我的變化這讓使用tasksDataSource.update

全部代碼這裏 http://dojo.telerik.com/EYOnu

function onSave(e) { 

       //reinitialize array 
       updatedSuccessorsIds = new Array(); 

       var gantt = e.sender; 

       var newStartDate = e.values.end; 
       var oldStartDate = e.task.end; 

       var diffMs = newStartDate - oldStartDate; // milliseconds between now & old 
       var diffMins = Math.round(diffMs/60000); 

       var currentTaskId = e.task.id.toString(); 

       var dependencies = dependenciesDataSource.successors(currentTaskId); 

       $.each(dependencies, function (key, depend) { 
        updateSuccessor(depend.successorId, diffMins); 
       }); 

       //kendoConsole.log("Task saved :: " + e.task.title); 
      } 

      function onDataBound() { 
       //kendoConsole.log("Gantt data bound"); 
      } 

      function onDataBinding() { 
       //kendoConsole.log("Gantt data binding"); 
      } 

      function onNavigate(e) { 
       //kendoConsole.log(kendo.format("navigate:: view:{0};", e.view)); 
      } 


      function onMoveStart(e) { 
       //kendoConsole.log("moveStart"); 
      } 

      function onMove(e) { 
       //kendoConsole.log("move"); 
      } 

      function onMoveEnd(e) { 


      } 

      function updateSuccessor(successortaskId, diffMins) { 

       var successortask = tasksDataSource.get(successortaskId); 

       if (successortask.summary) 
        return true;//this is parent so ignore its node 

       var successortaskStartDate = successortask.start; 
       successortaskStartDate.setMinutes(successortaskStartDate.getMinutes() + diffMins); 

       var successortaskEndDate = successortask.end; 
       successortaskEndDate.setMinutes(successortaskEndDate.getMinutes() + diffMins); 


       tasksDataSource.update(successortask, 
             { 
              start: successortaskStartDate, 
              end: successortaskEndDate 
             }); 

       //put updated successortask in array so we can use this array to find parent node to update 
       updatedSuccessorsIds.push(successortaskId); 

       var dependencies = dependenciesDataSource.successors(successortaskId); 

       $.each(dependencies, function (key, depend) { 
        updateSuccessor(depend.successorId, diffMins); 
       }); 

      } 

回答

0

您需要使用moveEnd事件,因爲這唯一標識移動任務(可能還需要使用resizeEnd當任務持續時間改變時的事件)。如果更改實際移動的任務,則需要調用e.preventDefault()以防止調用save方法,該方法將使用e.start和e.end值覆蓋您的更改