Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
richclient:emberjs:td7 [2018/03/27 00:02] – [Models] jcheron | richclient:emberjs:td7 [2019/08/31 14:21] (Version actuelle) – modification externe 127.0.0.1 | ||
---|---|---|---|
Ligne 11: | Ligne 11: | ||
===== Objectifs ===== | ===== Objectifs ===== | ||
- | * Conception Web client riche | + | * Conception |
+ | * Manipulations datas | ||
+ | * Utilisation composants | ||
===== -- Eléments à implémenter ===== | ===== -- Eléments à implémenter ===== | ||
Ligne 32: | Ligne 34: | ||
=== Comportement/ | === Comportement/ | ||
- | === Steps === | + | == Steps == |
Les Steps s' | Les Steps s' | ||
Ligne 39: | Ligne 41: | ||
* Chaque **step** est composée d'un **ui top attached segment** pour son titre, suivi d'un **ui attached segment** pour son contenu. | * Chaque **step** est composée d'un **ui top attached segment** pour son titre, suivi d'un **ui attached segment** pour son contenu. | ||
- | === Stories | + | == Stories == |
Lorsque la route **project/: | Lorsque la route **project/: | ||
Lorsque la route **project/: | Lorsque la route **project/: | ||
- | * Le double-click sur une story présente dans le board la rend active et affiche la barre de 3 boutons (Open, MoveTo -dropDown des steps- et Remove). | + | * Le click sur une story présente dans le board la rend active et affiche la barre de 3 boutons (Open, MoveTo -dropDown des steps- et Remove). |
* Les boutons **Open..** renvoient vers l'url **story/: | * Les boutons **Open..** renvoient vers l'url **story/: | ||
* Il est possible de déplacer les stories entre les steps par un drap and drop | * Il est possible de déplacer les stories entre les steps par un drap and drop | ||
Ligne 58: | Ligne 60: | ||
- | ==== Models | + | === Models === |
Ajouts de membres non persistants aux models : | Ajouts de membres non persistants aux models : | ||
Ligne 64: | Ligne 66: | ||
^Model ^propriété ^Rôle ^ | ^Model ^propriété ^Rôle ^ | ||
|**project** |< | |**project** |< | ||
- | |::: |< | + | |::: |< |
+ | |**story** |< | ||
+ | |::: |< | ||
+ | |||
+ | |||
+ | === Component === | ||
+ | |||
+ | Pour le drag and drop, on utilise les fonctionnalités HTML5, au travers de 2 composants (fortement inspirés de cet [[https:// | ||
+ | |||
+ | **draggable-dropzone** correspond à la zone de drop (step d' | ||
+ | |||
+ | <sxh javascript; | ||
+ | import Component from ' | ||
+ | import {set,get} from ' | ||
+ | |||
+ | export default Component.extend({ | ||
+ | classNames | ||
+ | classNameBindings : [ ' | ||
+ | dragClass | ||
+ | |||
+ | dragLeave(event) { | ||
+ | event.preventDefault(); | ||
+ | set(this, ' | ||
+ | }, | ||
+ | |||
+ | dragOver(event) { | ||
+ | event.preventDefault(); | ||
+ | set(this, ' | ||
+ | }, | ||
+ | |||
+ | drop(event) { | ||
+ | var data = event.dataTransfer.getData(' | ||
+ | this.sendAction(' | ||
+ | set(this, ' | ||
+ | } | ||
+ | }); | ||
+ | </ | ||
+ | |||
+ | **draggable-item** correspond à l' | ||
+ | |||
+ | <sxh javascript; | ||
+ | import Component from ' | ||
+ | import {get} from ' | ||
+ | |||
+ | export default Component.extend({ | ||
+ | classNameBindings: | ||
+ | isActive: Ember.computed(' | ||
+ | let content=get(this,' | ||
+ | if(get(content,' | ||
+ | return this.get(' | ||
+ | return ''; | ||
+ | }), | ||
+ | attributeBindings : [ ' | ||
+ | draggable | ||
+ | |||
+ | dragStart(event) { | ||
+ | return event.dataTransfer.setData(' | ||
+ | }, | ||
+ | doubleClick(){ | ||
+ | this.sendAction(" | ||
+ | }, | ||
+ | click(){ | ||
+ | this.sendAction(" | ||
+ | } | ||
+ | }); | ||
+ | </ | ||
+ | |||
+ | Exemple d' | ||
+ | |||
+ | <sxh html> | ||
+ | {{# | ||
+ | ... | ||
+ | {{/ | ||
+ | </ | ||
+ | |||
+ | |< 100% >| | ||
+ | ^Attribut ^Rôle ^ | ||
+ | |content| objet associé | | ||
+ | |dropped | action déclenchée sur le drop dont le prototype est (dragContent.id, | ||
+ | |||
+ | |||
+ | Exemple d' | ||
+ | |||
+ | <sxh html> | ||
+ | {{# | ||
+ | ... | ||
+ | {{/ | ||
+ | </ | ||
+ | |||
+ | |< 100% >| | ||
+ | ^Attribut ^Rôle ^ | ||
+ | |content| objet associé | | ||
+ | |activeClass | Classe utlisée si content.active==true | | ||
+ | |onClick| action déclenchée sur le click de l' | ||
+ | |||
+ | ==== -- Route Stories/ | ||
+ | |||
+ | |||
+ | <wrap mytodo> | ||
+ | |||
+ | <wrap info> | ||
+ | |||
+ | {{: | ||
+ | |||
+ | **Comportement de l' | ||
+ | |||
+ | * Une task **done** est barrée | ||
+ | * Les cases à cocher permettent de faire passer une tâche de non réalisée (done=false) à réalisée (done=true) et inversement | ||
+ | |||
+ | ===== Thanks ===== | ||
+ | |||
+ | < | ||
+ | <div style=" | ||
+ | |||
+ | < | ||
+ | <a class=" | ||
+ | < | ||
+ | <a class=" | ||
+ | |||
+ | < | ||
+ | <a class=" | ||
+ | < | ||
+ | < | ||