2016-07-04 1 views
0

J'ai fait une planification avec les travailleurs et leurs tâches, maintenant je dois l'améliorer en modifiant facilement les rendez-vous. Je voudrais savoir s'il est possible de faire un glisser-déposer pour déplacer les tâches et changer leur durée?SAPUI5: Expansion et déplacement des rendez-vous dans PlanningCalendar

Je pense que oui, mais tout ce que je trouve sur Internet ne correspond pas à une application mvc. Puisque la planification est dans une vue unique, je voudrais faire mon travail seulement dans le contrôleur de la vue.

EDIT: Dans mon contrôleur, je l'ai ce code:

onInit : function(){ 
     var oView = this.getView(); 

     //load jquery libraries for drag n drop 
     jQuery.sap.require("sap.ui.thirdparty.jqueryui.jquery-ui-core"); 
     jQuery.sap.require("sap.ui.thirdparty.jqueryui.jquery-ui-widget"); 
     jQuery.sap.require("sap.ui.thirdparty.jqueryui.jquery-ui-mouse"); 
     jQuery.sap.require("sap.ui.thirdparty.jqueryui.jquery-ui-draggable"); 
     jQuery.sap.require("sap.ui.thirdparty.jqueryui.jquery-ui-droppable"); 

     //make the appointments drag n droppables 
     var oAppointment = oView.byId("draggable"); 
     var idAppointment = oAppointment.getId(); 
     oAppointment.onAfterRendering = function(){ 
      $("#"+idAppointment).draggable({ 
       cancel:false 
      }) 
     }; 
    } 

L'id draggable est réglé sur mes CalendarAppointments comme ceci:

<appointments> 
    <unified:CalendarAppointment 
      id="draggable" 
      startDate="{CustomModel>EarlSchedStartdate}" 
      endDate="{CustomModel>EarlSchedFindate}" 
      title="{CustomModel>Description}"> 

    </unified:CalendarAppointment> 
</appointments> 

Dans un autre projet avec un seul bouton, cela fonctionne, mais ce n'est pas pour mes rendez-vous de planification.

+0

Cela ne devrait pas être trop difficile, en théorie: utilisez 'jquery-ui-draggable/droppable', affectez les gestionnaires d'événements' draggable() 'et' droppable() ' les objets 'CalendarAppointment' et/ou' PlanningCalendar', et dans ces gestionnaires font votre magie pour mettre à jour le modèle sous-jacent – Qualiture

+0

Le compilateur ne reconnaît pas la fonction draggable, mais peut-être que je ne l'utilise pas au même endroit. Dans ma fonction onInit(), j'ai les bons espaces de noms avec 'jQuery.sap.require'; alors j'ai fait ceci: 'oView.byId (" draggable "). draggable();'; alors j'ai eu cette erreur: 'Uncaught TypeError: oView.byId (...). draggable n'est pas une fonction' – Nicaps

+0

J'ai édité mon message si mes explications ne sont pas assez claires. – Nicaps

Répondre

1

Nous avons fait glisser et déposer fonctionnant bien avec PlanningCalendar en étendant le contrôle.

IMO n'a pas de sens pour faire ce genre de logique DOM dans un contrôleur.

"Dom Manipulations should not exist in controllers, services or anywhere else but in directives"

AngularJS meilleures pratiques, remplacer la directive avec un contrôle ou d'un composant pour UI5

jQuery UI ne marche pas touch de soutien, ne pouvait donc pas être utilisé dans un téléphone, tablette ou écran tactile, route testé beaucoup de Drag alternatif et Touch bibliothèques, quelques trucs cool là-bas, la plupart du temps trop pour ce qui était nécessaire, JS natif et SAPUI5 contrôle standard des événements de contrôle autant que possible, le repli de jQuery où nécessaire.

Dans le PlanningCalendar - Ajout d'un délégué d'événement à onAfterRendering d'un rendez-vous, a ajouté conditionnellement les styles d'éléments tels que les curseurs déplaçables et de la souris pour le redimensionnement, etc.

événement similaire Ajout des délégués aux commandes de CalendarRow, encore une fois facile à faire Dans PlanningCalendar, ils ont créé des zones de dépôt et géré des collisions de temps, etc.

On a beaucoup appris en étudiant la source de KendoUI Scheduler et de Widjimo Events Calendar, qui fonctionnent tous les deux avec OData. Suggérez à tous ceux qui doivent ajouter des fonctionnalités qui ne sont pas dans SAPUI5 de regarder ces bibliothèques et d'autres similaires pour trouver l'inspiration. Je suis assez content du résultat final, fonctionne parfaitement avec OData V2 exécutant Batch, manquant une fonctionnalité fantôme (un peu de code dans sap.ui.dt.plugin.DragDrop pour cela, jamais arrondi à l'ajouter) et promet pour gérer des événements via un contrôleur ou un callback, etc.

+0

Merci mais depuis que je suis français, j'ai à peine compris ce que vous avez écrit ^^ "Pour résumer, j'ai besoin de ** 1) ** pour mettre mon code dans mon index.html, entre