Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2601 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2  3  4  5  6  7  8  9  10  11
Auteur Sujet :

Ember.js - Framework JS - Ember Octane disponible !

n°2238856
LeRiton
Posté le 25-09-2014 à 15:21:28  profilanswer
 

Reprise du message précédent :

youmoussa a écrit :

Tu avais lu la page sur le nommage avant de regarder le tutoriel ?


 
Non :o
Getting Started, et ensuite je creuse.
 

mood
Publicité
Posté le 25-09-2014 à 15:21:28  profilanswer
 

n°2238857
youmoussa
Ecrou-vis
Posté le 25-09-2014 à 15:30:00  profilanswer
 

youmoussa a écrit :


Mon expérience montre que c'est surtout les gens qui lisent pas la doc le plus gros frein.


 
 
:o :o


---------------
Galerie HFR - Photoblog San Francisco - American Cars Photos
n°2238859
nraynaud
lol
Posté le 25-09-2014 à 15:35:50  profilanswer
 

(c'est vraiment être naïf de jeter un pavé de doc à la face des gens, on commence pas un apprentissage par lire un pavé, on commence par bidouiller et on lis progressivement des doc de référence sur des points de détails ou des techniques particulières)
 
 
http://ember101.com/videos/004-mas [...] et-linkto/
ici, il se passe quoi quand je clique sur une autre entrée niveau instances de détail ?
 
est-ce j'ai toujours la même instance de vue et la même instance de contrôleur, mais simplement le modèle du contrôleur est re-bindé sur le nouveau modèle (et tout se propage par observateurs) ? le contrôleur est détruit et un nouveau est créé, ou tout le monde part à la poubelle et est reconstruit, contrôleur et vue ?


---------------
trainoo.com, c'est fini
n°2238864
LeRiton
Posté le 25-09-2014 à 15:46:40  profilanswer
 


 
Le Getting Started fait partie de la doc  [:spamafote]  (OK, redface is red)
Blague à part, s'il faut se fader 80% du site (un peu aride) avant de faire le premier tuto y'a peut-être un trou dans la raquette non ?
 
Le reste du GS m'a paru plutôt digeste, mais pour ce point de confusion je pense qu'il y a vraiment moyen d'améliorer les choses facilement.
 

n°2238871
youmoussa
Ecrou-vis
Posté le 25-09-2014 à 15:59:10  profilanswer
 

nraynaud a écrit :

(c'est vraiment être naïf de jeter un pavé de doc à la face des gens, on commence pas un apprentissage par lire un pavé, on commence par bidouiller et on lis progressivement des doc de référence sur des points de détails ou des techniques particulières)


 
en l'occurence, je ne parle pas de lire toute la doc avant de démarrer, mais de lire en plus la partie "Concepts". Il faudrait surement mettre plus ça en avant ( voir ca devrait être lu avant le Getting Started / Todos app ).
 

nraynaud a écrit :


http://ember101.com/videos/004-mas [...] et-linkto/
ici, il se passe quoi quand je clique sur une autre entrée niveau instances de détail ?
 
est-ce j'ai toujours la même instance de vue et la même instance de contrôleur, mais simplement le modèle du contrôleur est re-bindé sur le nouveau modèle (et tout se propage par observateurs) ? le contrôleur est détruit et un nouveau est créé, ou tout le monde part à la poubelle et est reconstruit, contrôleur et vue ?


 
Les controlleurs à ce niveau sont des singletons, donc ils ne sont pas détruits autant que je sache.
 
Le modèle est assigné au controlleur et tout se propage via le binding. ( il faut que je reverifie pour être sur de ne pas dire de connerie là )


Message édité par youmoussa le 25-09-2014 à 16:04:36

---------------
Galerie HFR - Photoblog San Francisco - American Cars Photos
n°2238873
youmoussa
Ecrou-vis
Posté le 25-09-2014 à 16:01:30  profilanswer
 

LeRiton a écrit :


 
Le Getting Started fait partie de la doc  [:spamafote]  (OK, redface is red)
Blague à part, s'il faut se fader 80% du site (un peu aride) avant de faire le premier tuto y'a peut-être un trou dans la raquette non ?
 
Le reste du GS m'a paru plutôt digeste, mais pour ce point de confusion je pense qu'il y a vraiment moyen d'améliorer les choses facilement.
 


 
Ben je ne parle pas de lire 80% de la doc, mais 2 pages de plus  [:doc petrus]  
 
Je comprends bien que ce n'est pas réaliste de lire un bouquin entier avant de proposer de passer à la pratique :jap:


---------------
Galerie HFR - Photoblog San Francisco - American Cars Photos
n°2238875
nraynaud
lol
Posté le 25-09-2014 à 16:03:35  profilanswer
 

te fais pas chier, je vais regarder alors.
c'est parce que je fais rien comme dans les tutos. Et toutes mes vues sont pas simplement des éditions de DOM à coup de templates, mais j'ai aussi des trucs en 3D qui nécessite d'écrire à la main le listener de changement de détail. (et en SVG je le fais aussi, j'ai pas trop envie de me tordre le cerveau à faire rentrer ma vue 2D dans le monde des templates, sachant que j'ai une lib SVG qui ignore Ember).


---------------
trainoo.com, c'est fini
n°2238876
youmoussa
Ecrou-vis
Posté le 25-09-2014 à 16:06:20  profilanswer
 

c'est assez courant d'utiliser svg/d3 avec Ember.

 

La bonne approche est généralement d'écrire des Components pour encapsuler les directives/primitives de ces librairies.

 

Je vais quand même chercher dans le code source l'endroit où le modèle est remplacé ( je reste sur de moi à 95% on va dire :o )


Message édité par youmoussa le 25-09-2014 à 16:06:57

---------------
Galerie HFR - Photoblog San Francisco - American Cars Photos
n°2238883
nraynaud
lol
Posté le 25-09-2014 à 16:15:38  profilanswer
 

la vue, c'est sûr qu'elle dégage pas, y'a qu'un appel à "didInsertElement".


---------------
trainoo.com, c'est fini
n°2238891
youmoussa
Ecrou-vis
Posté le 25-09-2014 à 16:56:11  profilanswer
 

Ce serait très con d'avoir implementé le binding si c'est pour tout détruire/reconstruire quand on change de modèle  :jap:


---------------
Galerie HFR - Photoblog San Francisco - American Cars Photos
mood
Publicité
Posté le 25-09-2014 à 16:56:11  profilanswer
 

n°2238892
nraynaud
lol
Posté le 25-09-2014 à 17:01:41  profilanswer
 

bof, on peut pas faire tout mutable ou tout immuable, donc ils peuvent avoir tracé la ligne n'importe où (et ensuite être super agressifs dans leurs choix, fussent-ils à la cons, comme les observateurs pas appelés avant la première lecture).


---------------
trainoo.com, c'est fini
n°2238893
nraynaud
lol
Posté le 25-09-2014 à 17:11:41  profilanswer
 

j'ai une question par rapport au code maitre-détail:
(toujours le même http://jsbin.com/ijejap/1/edit )
 
ici il utilise 2 templates et d'une certaine façons le système colle le nom des routes avec le nom des templates (et encore, je sais pas comment il se démerde si y'a plusieurs {{outlets}}, par l'ordre dans la page?).
 
comment est-ce que je peux tout mettre dans le même template ?


---------------
trainoo.com, c'est fini
n°2238896
youmoussa
Ecrou-vis
Posté le 25-09-2014 à 17:38:56  profilanswer
 

tu ne peux effectivement pas avoir plusieurs outlets sans noms dans un meme template pour la raison que tu cites ( c'est ce que je tentais d'expliquer dans le "Comment les 2 routes s'emboitent ?" de mon post explicatif d'hier ).
 
Tu veux qu'une partie de la vue soit vide tant que tu n'as pas effectué une action ? J'aurai besoin de comprendre un peu plus à quoi doit ressembler ta vue en fonction de l'état de ton application.


---------------
Galerie HFR - Photoblog San Francisco - American Cars Photos
n°2238897
nraynaud
lol
Posté le 25-09-2014 à 17:56:25  profilanswer
 

template d'application:

Code :
  1. <div class="operations">
  2.    <ol>
  3.        {{#each}}
  4.            {{#link-to "operation" this}}
  5.                <li>{{name}}</li>
  6.            {{/link-to}}
  7.        {{/each}}
  8.    </ol>
  9. </div>
  10. <div class="currentOperation">{{outlet}}</div>


template "operation"

Code :
  1. <strong>{{name}}</strong>


 
comme actuellement, il laisse l'endroit où se trouve {{outlet}} vide.
 


---------------
trainoo.com, c'est fini
n°2238898
youmoussa
Ecrou-vis
Posté le 25-09-2014 à 18:13:09  profilanswer
 

Et comment tu sélectionnes/deselectionnes l'opération qui doit être affichée ?


Message édité par youmoussa le 25-09-2014 à 18:13:25

---------------
Galerie HFR - Photoblog San Francisco - American Cars Photos
n°2238899
nraynaud
lol
Posté le 25-09-2014 à 18:19:09  profilanswer
 

par l'url ?
http://localhost/~nraynaud/webgcod [...] erations/1
 
http://localhost/~nraynaud/webgcod [...] perations/
 
comme avant ?
ça reste une vue maître-détail, parfois on vire le détail (même si là j'en ai pas besoin, mais je veux comprendre comment tout faire en un seul template)


---------------
trainoo.com, c'est fini
n°2238901
youmoussa
Ecrou-vis
Posté le 25-09-2014 à 18:30:41  profilanswer
 

Tu sembles chercher a détourner le comportement de base du framework sans que je n'arrive a comprendre l'intérêt.
 
Pourquoi veux tu n'avoir qu'un template ?


Message édité par youmoussa le 25-09-2014 à 18:31:03

---------------
Galerie HFR - Photoblog San Francisco - American Cars Photos
n°2238902
youmoussa
Ecrou-vis
Posté le 25-09-2014 à 18:33:03  profilanswer
 

Une réponse courte, serait de modifier une propriété 'opération' sur ton OperationsController que tu maintiendrais toi même.
 
Ça me semble être une mauvaise pratique.


---------------
Galerie HFR - Photoblog San Francisco - American Cars Photos
n°2238903
nraynaud
lol
Posté le 25-09-2014 à 18:46:51  profilanswer
 

je veux faire ça pour comprendre le mécanisme du merdier. Pour changer des bouts et voir ce qui change. j'essaye de construire une image mentale de ce que fait le framework et comment il marche. Et je dois avouer que pour l'instant ça a un sens assez limité au niveau des outlets, des routes et des templates.
J'imagine que le forcer à faire un truc qui sort des conventions de nommage oblige à exposer le mécanisme sous-jacent, et à voir un peu ce qui est caché.


---------------
trainoo.com, c'est fini
n°2238904
nraynaud
lol
Posté le 25-09-2014 à 18:48:38  profilanswer
 

(et j'en profite que t'es là parce que quand je serai tout seul, je vais me toucher la bite avec mes questions, donc j'ai intérêt à prendre de l'avance)


---------------
trainoo.com, c'est fini
n°2238907
youmoussa
Ecrou-vis
Posté le 25-09-2014 à 19:06:26  profilanswer
 

nraynaud a écrit :

je veux faire ça pour comprendre le mécanisme du merdier. Pour changer des bouts et voir ce qui change. j'essaye de construire une image mentale de ce que fait le framework et comment il marche. Et je dois avouer que pour l'instant ça a un sens assez limité au niveau des outlets, des routes et des templates.
J'imagine que le forcer à faire un truc qui sort des conventions de nommage oblige à exposer le mécanisme sous-jacent, et à voir un peu ce qui est caché.


 
Je comprends plus ou moins, mais ça me semble plus logique de commencer a maîtriser les concepts d'un framework avant de chercher a s'en éloigner en tentant de compliquer l'implémentation.
 
Les conventions de nommage sont la pour assembler certaines pièces du puzzle ensemble.
 
Il existe des moyens de les contourner de manière "légale/officielle".
 
- en utilisant path dans ton router tu permet de dissocier l'url du nom de la route.
- en utilisant controllerName dans ta route tu as la possibilité de renommer ou d'utiliser un controlleur ne suivant pas la règle de nommage.
- en utilisant templateName dans une vue tu peux également ne pas nommer ton template selon la vue
 
Tu peux ensuite aller plus en profondeur et avoir ta propre implémentation de renderTemplate dans la route pour afficher quelque chose ne correspondant pas a la règle de nommage.
 
 
La règle de nommage est la pour te simplifier la vie. J'ai l'impression que parce que tu n'as pas lu cette partie, tu souhaites t'en affranchir.


---------------
Galerie HFR - Photoblog San Francisco - American Cars Photos
n°2238909
youmoussa
Ecrou-vis
Posté le 25-09-2014 à 19:08:18  profilanswer
 

nraynaud a écrit :

(et j'en profite que t'es là parce que quand je serai tout seul, je vais me toucher la bite avec mes questions, donc j'ai intérêt à prendre de l'avance)


 
Je serai toujours la :o ( au grand désespoir de certains :o )


---------------
Galerie HFR - Photoblog San Francisco - American Cars Photos
n°2238911
nraynaud
lol
Posté le 25-09-2014 à 19:18:28  profilanswer
 

J'ai lu la convention de nommage, mais c'est pas suffisant. Je trouve légèrement méprisant de dire "t'as pas lu" quand j'ai passé des heures à googler le merdier. Donc j'ai envie de répondre que la doc est de la merde parce qu'elle prescrit des pratiques sans expliquer les mécanismes en détail.
 
J'ai une vue qui va entre autre afficher le détail qui est en 3D, elle est pas templatisable (enfin elle est insérée une fois dans le template d'application au plus haut niveau et elle bouge plus, elle plante ses obsevateurs dans des contrôleurs et elle bouge plus en ce qui concerne le reste du monde). Elle va afficher à la fois des infos globales liées à la liste des opérations et le détail (par exemple la pièce finie ou au contraire le brut en transparence, et l'opération d'usinage sélectionnée par dessus en rouge sans transparence).
 
Je ne vois absolument pas comment coller ce modèle à la notion d'outlet ou de route. Et je ne changerai pas cette vue à court terme parce qu'elle est déjà utilisée dans 3 apps.
 

Code :
  1. <div class="operations">
  2.     <ol>
  3.         {{#each}}
  4.             {{#link-to "operation" this}}
  5.                 <li>{{name}}</li>
  6.             {{/link-to}}
  7.         {{/each}}
  8.     </ol>
  9. </div>
  10. <div class="currentOperation">{{outlet}}</div>
  11. <div class="viewContainer">
  12.     {{view Visucam.ThreeDView}}
  13. </div>


---------------
trainoo.com, c'est fini
n°2238915
youmoussa
Ecrou-vis
Posté le 25-09-2014 à 20:42:22  profilanswer
 

nraynaud a écrit :

(c'est vraiment être naïf de jeter un pavé de doc à la face des gens, on commence pas un apprentissage par lire un pavé, on commence par bidouiller et on lis progressivement des doc de référence sur des points de détails ou des techniques particulières)


 

nraynaud a écrit :

J'ai lu la convention de nommage, mais c'est pas suffisant. Je trouve légèrement méprisant de dire "t'as pas lu" quand j'ai passé des heures à googler le merdier. Donc j'ai envie de répondre que la doc est de la merde parce qu'elle prescrit des pratiques sans expliquer les mécanismes en détail.


 
Je veux bien croire que la doc est perfectible, je trouve bizarre de dire "je veux pas lire un pavé" mais je veux qu'on m'explique "les mécanismes en détail".
 
Ça semble difficilement conciliable, surtout pour un framework de cette envergure.
 
Désolé si je t'ai froissé :o
 

nraynaud a écrit :


J'ai une vue qui va entre autre afficher le détail qui est en 3D, elle est pas templatisable (enfin elle est insérée une fois dans le template d'application au plus haut niveau et elle bouge plus, elle plante ses obsevateurs dans des contrôleurs et elle bouge plus en ce qui concerne le reste du monde). Elle va afficher à la fois des infos globales liées à la liste des opérations et le détail (par exemple la pièce finie ou au contraire le brut en transparence, et l'opération d'usinage sélectionnée par dessus en rouge sans transparence).
 
Je ne vois absolument pas comment coller ce modèle à la notion d'outlet ou de route. Et je ne changerai pas cette vue à court terme parce qu'elle est déjà utilisée dans 3 apps.
 

Code :
  1. <div class="operations">
  2.     <ol>
  3.         {{#each}}
  4.             {{#link-to "operation" this}}
  5.                 <li>{{name}}</li>
  6.             {{/link-to}}
  7.         {{/each}}
  8.     </ol>
  9. </div>
  10. <div class="currentOperation">{{outlet}}</div>
  11. <div class="viewContainer">
  12.     {{view Visucam.ThreeDView}}
  13. </div>



 
Tu veux quoi qu'il arrive différents templates pour séparer correctement tes différents éléments. En fonction de certains événements, tu changeras le modèle sur le contrôleur.
 
Si tu as une partie de ton écran qui doit avoir un différent template en fonction du contexte, tu peux utiliser un outlet et connecter différents contenus selon tes besoins.


---------------
Galerie HFR - Photoblog San Francisco - American Cars Photos
n°2238917
abracadebr​id
http://www.abracadebrid.com
Posté le 25-09-2014 à 22:39:24  profilanswer
 

je ne connaissais pas


---------------
http://www.abracadebrid.com débride 45 hébergeurs, uploaded, etc... Streaming purevid... gratuit sans java sans pubs.
n°2238935
nraynaud
lol
Posté le 26-09-2014 à 06:12:49  profilanswer
 

youmoussa a écrit :

Tu veux quoi qu'il arrive différents templates pour séparer correctement tes différents éléments. En fonction de certains événements, tu changeras le modèle sur le contrôleur.


Ma question est assez spécifique: je ne *veux* pas.  
Je ne *veux* pas d'un fichier d'une seule ligne juste parce qu'un mec à l'autre bout du monde a décidé que c'était mieux pour mon projet. ça n'est pas mieux, parce ça va me forcer à multiplier mes fichiers d'une ligne, ça va m'obliger à commencer à les classer dans des répertoires, ça va obliger le compilo à faire des descentes récursives, ça va me faire chier à naviguer, ça va augmenter la relouterie dans github en ligne.
 
Ce template ne porte pas son poids, il doit être mergé avec autre chose. Je veux pouvoir moi-même décider de l'arrangement de mon code dans des fichiers.
Même si dans cet exemple précis, l'évolution du code me portait à le spliter dans un fichier propre pour des raisons qui me plaise, le cas se reproduit tous les jours, il est important de pouvoir choisir sa granularité, de ne pas se la faire imposer.
 
L'exemple classique est le type qui te force à séparer physiquement tes vues des contrôleurs "parce qu'il faut séparer proprement", sauf que si l'intégralité du bout qui utilise le framework est ridiculement petit par rapport au reste du projet, ou s'il ne touche qu'un domaine spécifique du business, alors foutre la vue et le contrôleur ensemble dans le même fichier parce que c'est les seuls qui touchent à ça peut avoir du sens, pour pas étaler un projet qui a déjà un problème de taille. Et on a bien séparé les choses, simplement on a coupé dans un axe différent que mécaniquement vue/contrôleur ou maître/détail.
 
Pour en revenir à cette séparation spécifique maître/détail, mettre une vue qui a connaissance du maître dans le détail est déjà une erreur philosophique de séparation des idées. Le maître a forcément connaissance des détails (puisqu'il est une agrégation de détails) mais les détails n'ont pas forcément connaissance de leur maître, donc forcer une vue qui connait le maître dans le template spécifique du détail, c'est rajouter un lien à l'envers dans qui a besoin de savoir quoi, puisque maintenant maitre et détail savent qui est le maitre, maintenant tout le monde sait afficher le maître et tout le monde sait afficher le détail. Alors qu'en séparant hiérarchiquement on peut laisser tout ce qui concerne le détail dans l'ignorance du maître, et on a brisé la boucle de dépendances.
 
Tu va me dire que le paté au-dessus est théorique et que dans la vraie vie on s'en fout des dépendances, sauf que tu m'as répondu sur un terrain théorique qu'il faut séparer correctement. Et dans ma vraie vie à moi, un truc important c'est la séparation par ordre d'idée "business" (ce qui concerne le calcul de trajectoire, ce qui concerne le calcul de vitesse d'outil, etc.), plus que de monter à des geeks que je sais séparer un maître d'un détail. Et un vrai truc important pour moi, c'est de découper mes fichiers comme je veux (enfin, autant que possible, parce que mettre un template dans du JS c'est pas gagné, et cet enculé de chrome veut pas de code dans les balises <script>, alors que les templates dans les <script> ça peut être un outil intéressant dans la toolbox). En général, j'essaye que mes fichiers fassent entre 30 et 300 lignes. Avant je viole les règles de séparations (m'enfin sur 30 lignes, ça devrait bien se passer la gestion du logiciel, hello util.js) et après 300 lignes j'essaye d'utiliser une excuse du monde de l'objet pour spliter une classe. Le nombre de fichiers et leur taille c'est le nerf de la guerre en développement.


---------------
trainoo.com, c'est fini
n°2238954
youmoussa
Ecrou-vis
Posté le 26-09-2014 à 10:47:08  profilanswer
 

Citation :

Pour en revenir à cette séparation spécifique maître/détail, mettre une vue qui a connaissance du maître dans le détail est déjà une erreur philosophique de séparation des idées.


 
Ça tombe bien ce n'est pas le cas avec Ember.


---------------
Galerie HFR - Photoblog San Francisco - American Cars Photos
n°2239016
abracadebr​id
http://www.abracadebrid.com
Posté le 26-09-2014 à 16:44:46  profilanswer
 

:pt1cable: :pt1cable:


---------------
http://www.abracadebrid.com débride 45 hébergeurs, uploaded, etc... Streaming purevid... gratuit sans java sans pubs.
n°2239065
nraynaud
lol
Posté le 27-09-2014 à 16:30:47  profilanswer
 

j'imagine que donner une URL aux résultats de mes long calculs et utiliser l'état loading du routeur pendant que ça calcule ça serait très très mal ?
 
Le vrai problème, c'est que ça prend pas en charge les résultats partiels ou le chargement progressif.


---------------
trainoo.com, c'est fini
n°2239068
youmoussa
Ecrou-vis
Posté le 27-09-2014 à 16:47:18  profilanswer
 

Le problème de cette approche, c'est que tu vas bloquer l'utilisation de l'application.
 
Je ne sais pas si c'est ce que tu veux vraiment en terme d'experience utilisateur.
 
C'est quoi l'ordre de grandeur de ces calculs ?
Tu ne les lances pas dans un web worker ?


Message édité par youmoussa le 27-09-2014 à 16:47:53

---------------
Galerie HFR - Photoblog San Francisco - American Cars Photos
n°2239069
nraynaud
lol
Posté le 27-09-2014 à 16:52:49  profilanswer
 

sisi.  
J'ai pas vidé tout mon cerveau: le seul endroit où Ember supporte les promises c'est dans le routage (j'ai greppé le code source il y a quelques version). Donc le seul endroit où on peut avoir un peu d'aide c'est en mappant l'appel a worker comme si c'était un appel distant.


---------------
trainoo.com, c'est fini
n°2239070
nraynaud
lol
Posté le 27-09-2014 à 16:54:08  profilanswer
 

les calculs peuvent être longs:
http://nraynaud.github.io/webgcode/text.html
 
(enfin, si un jour je décoince mon cerveau, je vais utiliser une méthode plus rapide, mais pour ça il faut le diagramme de voronoi)


---------------
trainoo.com, c'est fini
n°2239081
youmoussa
Ecrou-vis
Posté le 27-09-2014 à 21:02:53  profilanswer
 

Tu peux utiliser des promises ailleurs.
 
Tu peux très bien créer ton worker, et gérer ça dans un controlleur a part. L'idée d'utiliser une route te permet de t'affranchir de prendre une décision sur ce que peut faire l'utilisateur pendant ce calcul.
 
Sinon, tu gères ça a part, et il faut implémenter un système de notification pour que l'utilisateur sache quand le calcul est fini  ( avec un lien ou un truc dans le genre pour qu'il puisse visualiser le résultat )


---------------
Galerie HFR - Photoblog San Francisco - American Cars Photos
n°2239084
nraynaud
lol
Posté le 27-09-2014 à 22:01:06  profilanswer
 

en fait c'est exactement ce que j'ai fait dans le lien que j'ai posté [:pingouino]


---------------
trainoo.com, c'est fini
n°2239090
youmoussa
Ecrou-vis
Posté le 27-09-2014 à 23:57:12  profilanswer
 

Je suis a un mariage et sur mon téléphone :o


---------------
Galerie HFR - Photoblog San Francisco - American Cars Photos
n°2239091
nraynaud
lol
Posté le 28-09-2014 à 02:03:09  profilanswer
 

Code :
  1. Visucam.Document = DS.Model.extend({
  2.            operations: DS.hasMany('operation')
  3.        });
  4.  
  5.        Visucam.Operation = DS.Model.extend({
  6.            name: DS.attr('string'),
  7.            outline: DS.attr('string'),
  8.            toolpath: DS.attr()
  9.        });
  10.  
  11.        var machine = new cam.Machine(null);
  12.        var p1 = 'M0,0l100,0l0,25l-19.01440659255054,0l-25.02682544447841,-21l-11.917535925942104,0l-25.02682544447841,21l-19.01440659255054,0Z';
  13.        var p2 = 'M0,0L0,60L35,60L35,45L20,30L35,15L35,-15L20,-30L35,-60L0,-60Z';
  14.        Visucam.Operation.FIXTURES = [
  15.            {
  16.                id: 1,
  17.                name: 'dremel bracket',
  18.                outline: p1,
  19.                toolpath: machine.fromClipper(machine.contourClipper(cam.pathDefToClipper(p1), 3, false))
  20.            },
  21.            {
  22.                id: 2,
  23.                name: 'V blocks',
  24.                outline: p2,
  25.                toolpath: machine.rampToolPathArray(machine.fromClipper(machine.contourClipper(cam.pathDefToClipper(p2), 3, false)), 0, -10, 5)
  26.            }
  27.        ];
  28.        Visucam.Document.FIXTURES = [
  29.            {
  30.                id: 1,
  31.                operations: [1, 2]
  32.            }
  33.        ];


 

Citation :

Error: Assertion Failed: You looked up the 'operations' relationship on a 'document' with id 1 but some of the associated records were not loaded. Either make sure they are all loaded together with the parent record, or specify that the relationship is async (`DS.hasMany({ async: true })`)


bon, c'est légèrement attardé mental come API (tu sais pas faire une descente récursive, tu veux un bonbon ? t'as peur des boucles ? j'te donne 10centimes pour acheter un détecteur), on va bien trouver une fonction qui charge récursivement au lieu de shallow (j'ai un PB plus tard dans l'ui et l'async, il fait juste un écran blanc sans aucune erreur, il me faut une stacktrace pour trouver le pb).
 
30min de google ... pas trouvé de fonction de chargement récursif.
 
bon le moins pire semble être find() en ajoutant les trucs qu'on veut sideloader (déjà paye ton dry, il faut ré-écrire le contenu de la fixture dans l'appel).
 

Code :
  1. this.store.find('document', 1, {operation: [1, 2]}).then(function (result) {
  2.                    console.log('ApplicationRoute.model', result.get('operations'));
  3.                });


Citation :

Error: Assertion Failed: You looked up the 'operations' relationship on a 'document' with id 1 but some of the associated records were not loaded. Either make sure they are all loaded together with the parent record, or specify that the relationship is async (`DS.hasMany({ async: true })`)


bizarre, on dirait qu'il a pas fait le side-loading. Peut-être que c'est pas un nom d'entité, mais un nom de relation qu'il faut mettre:

Code :
  1. this.store.find('document', 1, {operations: [1, 2]}).then(function (result) {
  2.                    console.log('ApplicationRoute.model', result.get('operations'));
  3.                });


Citation :

Error: Assertion Failed: You looked up the 'operations' relationship on a 'document' with id 1 but some of the associated records were not loaded. Either make sure they are all loaded together with the parent record, or specify that the relationship is async (`DS.hasMany({ async: true })`)


oulà la soirée va être compliquée, t'es *obligé* d'avoir un nom d'entité=nom de la relation, et on voit bien qu'ils ont choisi un exemple du tonnerre dans la doc par rapport à ça.
 
 
Bref, j'en suis à démonter ember-data depuis plus d'une heure, alors que j'ai juste 2 fixtures avec une relation et que mon vrai problème c'est un template qui s'affiche pas.

Message cité 2 fois
Message édité par nraynaud le 28-09-2014 à 02:04:32

---------------
trainoo.com, c'est fini
n°2239094
nraynaud
lol
Posté le 28-09-2014 à 03:21:13  profilanswer
 

'tain c'est l'horreur, j'ai des objets persos dans mon graphe de records et il détruit leurs prototype dans l'adaptateur, mais il semble pas appeler mon transformateur custom non plus quand j'essaye d'être un bon citoyen (sauf si j'ai fait une faute d'orthographe ou utilisé le nom du mauvais truc comme convention, mais je crois avoir bon).

 

edit: 'tain trouvé. c'est un nom de classe que j'ai foiré.


Message édité par nraynaud le 28-09-2014 à 03:23:06

---------------
trainoo.com, c'est fini
n°2239133
nraynaud
lol
Posté le 29-09-2014 à 00:32:18  profilanswer
 

c'est quoi l'état de l'art du polymorphisme dans ember data ?
je vois des class_type pour la clef sur certains sites, des classType, des ClassType, et dans la doc je trouve rien ni aucun guide (enfin pas dans la recherche du site d'ember en tout cas)


---------------
trainoo.com, c'est fini
n°2239134
youmoussa
Ecrou-vis
Posté le 29-09-2014 à 00:42:05  profilanswer
 

nraynaud a écrit :

Code :
  1. Visucam.Document = DS.Model.extend({
  2.            operations: DS.hasMany('operation')
  3.        });
  4.  
  5.        Visucam.Operation = DS.Model.extend({
  6.            name: DS.attr('string'),
  7.            outline: DS.attr('string'),
  8.            toolpath: DS.attr()
  9.        });
  10.  
  11.        var machine = new cam.Machine(null);
  12.        var p1 = 'M0,0l100,0l0,25l-19.01440659255054,0l-25.02682544447841,-21l-11.917535925942104,0l-25.02682544447841,21l-19.01440659255054,0Z';
  13.        var p2 = 'M0,0L0,60L35,60L35,45L20,30L35,15L35,-15L20,-30L35,-60L0,-60Z';
  14.        Visucam.Operation.FIXTURES = [
  15.            {
  16.                id: 1,
  17.                name: 'dremel bracket',
  18.                outline: p1,
  19.                toolpath: machine.fromClipper(machine.contourClipper(cam.pathDefToClipper(p1), 3, false))
  20.            },
  21.            {
  22.                id: 2,
  23.                name: 'V blocks',
  24.                outline: p2,
  25.                toolpath: machine.rampToolPathArray(machine.fromClipper(machine.contourClipper(cam.pathDefToClipper(p2), 3, false)), 0, -10, 5)
  26.            }
  27.        ];
  28.        Visucam.Document.FIXTURES = [
  29.            {
  30.                id: 1,
  31.                operations: [1, 2]
  32.            }
  33.        ];


 

Citation :

Error: Assertion Failed: You looked up the 'operations' relationship on a 'document' with id 1 but some of the associated records were not loaded. Either make sure they are all loaded together with the parent record, or specify that the relationship is async (`DS.hasMany({ async: true })`)


bon, c'est légèrement attardé mental come API (tu sais pas faire une descente récursive, tu veux un bonbon ? t'as peur des boucles ? j'te donne 10centimes pour acheter un détecteur), on va bien trouver une fonction qui charge récursivement au lieu de shallow (j'ai un PB plus tard dans l'ui et l'async, il fait juste un écran blanc sans aucune erreur, il me faut une stacktrace pour trouver le pb).
 
30min de google ... pas trouvé de fonction de chargement récursif.
 
bon le moins pire semble être find() en ajoutant les trucs qu'on veut sideloader (déjà paye ton dry, il faut ré-écrire le contenu de la fixture dans l'appel).
 

Code :
  1. this.store.find('document', 1, {operation: [1, 2]}).then(function (result) {
  2.                    console.log('ApplicationRoute.model', result.get('operations'));
  3.                });


Citation :

Error: Assertion Failed: You looked up the 'operations' relationship on a 'document' with id 1 but some of the associated records were not loaded. Either make sure they are all loaded together with the parent record, or specify that the relationship is async (`DS.hasMany({ async: true })`)


bizarre, on dirait qu'il a pas fait le side-loading. Peut-être que c'est pas un nom d'entité, mais un nom de relation qu'il faut mettre:

Code :
  1. this.store.find('document', 1, {operations: [1, 2]}).then(function (result) {
  2.                    console.log('ApplicationRoute.model', result.get('operations'));
  3.                });


Citation :

Error: Assertion Failed: You looked up the 'operations' relationship on a 'document' with id 1 but some of the associated records were not loaded. Either make sure they are all loaded together with the parent record, or specify that the relationship is async (`DS.hasMany({ async: true })`)


oulà la soirée va être compliquée, t'es *obligé* d'avoir un nom d'entité=nom de la relation, et on voit bien qu'ils ont choisi un exemple du tonnerre dans la doc par rapport à ça.
 
 
Bref, j'en suis à démonter ember-data depuis plus d'une heure, alors que j'ai juste 2 fixtures avec une relation et que mon vrai problème c'est un template qui s'affiche pas.


 
Je déconseille le FixtureAdapter.
 
J'utilise sinon.js, pas encore regarder pretender.


---------------
Galerie HFR - Photoblog San Francisco - American Cars Photos
n°2239135
youmoussa
Ecrou-vis
Posté le 29-09-2014 à 00:48:51  profilanswer
 

Pour la doc, ça fait des mois que je me dis qu'il faudrait que je fasse une PR pour clarifier le nommage. Le choix de nom de classe avec un seul mot, ne permet effectivement pas de savoir quoi utiliser selon les besoins.


---------------
Galerie HFR - Photoblog San Francisco - American Cars Photos
n°2239136
nraynaud
lol
Posté le 29-09-2014 à 00:49:36  profilanswer
 

ben moi pour l'instant je ferai bien tout JSON en dur dans mon code. A plus long terme ça va se retrouver en localstorage qui est aussi une API synchrone (ou asynchrone mais super rapide dans l'app google).
 
 
là c'est chaud sur le polymorphisme, j'ai ça:

Code :
  1. Visucam.Operation = DS.Model.extend({
  2.            name: DS.attr('string'),
  3.            outline: DS.belongsTo('shape'),
  4.            inside: DS.attr('boolean'),
  5.            toolDiameter: DS.attr('number'),
  6.            toolpath: DS.attr('toolpath')
  7.        });
  8.        Visucam.RampingContourOperation = Visucam.Operation.extend({
  9.            rampZ: DS.attr('number')
  10.        });
  11.        Visucam.SimpleContourOperation = Visucam.Operation.extend({
  12.            startZ: DS.attr('number'),
  13.            stopZ: DS.attr('number'),
  14.            turns: DS.attr('number')
  15.        });
  16.  
  17.        Visucam.Document = DS.Model.extend({
  18.            operations: DS.hasMany(Visucam.Operation, {polymorphic: true}),
  19.            shapes: DS.hasMany('shape')
  20.        });


comment je peux écrire une fixture pour les opérations ?
 
j'ai tenté ça, mais il a pas l'air d'aimer:

Code :
  1. Visucam.Operation.FIXTURES = [
  2.            {id: 1,
  3.                name: 'outer profiling',
  4.                outline: 1,
  5.                toolDiameter: 3,
  6.                inside: false,
  7.                type: 'Visucam.RampingContourOperation',
  8.                toolpath: {className: tp1.getTypeName(), path: tp1.path}
  9.            },
  10.            {
  11.                id: 2,
  12.                name: 'inner profiling',
  13.                outline: 2,
  14.                toolDiameter: 3,
  15.                inside: true,
  16.                type: 'Visucam.SimpleContourOperation',
  17.                toolpath: {className: tp2.getTypeName(), path: tp2.path}
  18.            }
  19.        ];
  20.        Visucam.Document.FIXTURES = [
  21.            {
  22.                id: 1,
  23.                operations: [1,2
  24.  
  25.                ],
  26.                shapes: [1, 2]
  27.            }
  28.        ];


Citation :

Error while loading route: TypeError: Cannot read property 'typeKey' of undefined
    at Ember.Object.extend.modelFor (http://localhost/~nraynaud/webgcode/webapp/libs/ember-data-1.0.0-beta10.js:10993:36)
    at Ember.Object.extend.recordForId (http://localhost/~nraynaud/webgcode/webapp/libs/ember-data-1.0.0-beta10.js:10458:37)


Message édité par nraynaud le 29-09-2014 à 00:49:57

---------------
trainoo.com, c'est fini
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5  6  7  8  9  10  11

Aller à :
Ajouter une réponse
 

Sujets relatifs
Comment créer un site web qu'on peut gérer avec un CMS après ?créer un fichier zip et le télécharger
Quelle solution pour créer une base de données ?Besoin d'une personne pour me créer une page accès membre.
Créer une page web html avec zone pour laisser un commantairecréer un rapport xml avec les outils Blindeelephant, waffit
[RESOLU] Créer un CSV à partir d'une chaîne en phpApplications bloquées par Java
Créer un site e-commercecréer son site en 10 minutes ?
Plus de sujets relatifs à : Ember.js - Framework JS - Ember Octane disponible !


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR