2017-02-18 77 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值覆盖您的更改