J'ai un problème avec le redimensionnement du système de coordonnées d'un canevas lors de l'utilisation de Flexbox et Enyo. Voir l'exemple sur: http://jsfiddle.net/g7MLS/1989/Redimensionnement du canevas avec Flexbox et Enyo
Lorsque vous l'exécutez pour la première fois, tout va bien. Réduire la largeur de la boîte et la ligne de texte reste 1 ligne jusqu'à ce que le canevas arrive à min-width, puis le texte commence à envelopper.
Pour voir le problème, supprimez les lignes:
C.WIDTH = b.width;
c.hauteur = b.hauteur; FlexBox semble utiliser la largeur de coordonnées interne pour organiser les choses ... ou quelque chose. Le texte commencera maintenant à se rétracter avant que la toile ne rétrécisse en min largeur.
Je ne peux pas dupliquer la configuration exacte sans Enyo, mais est proche et ne semble pas faire la même chose: https://jsfiddle.net/ez6b2q8v/103/
La façon dont je le comprends, réglage de la largeur toile/hauteur ne devrait affecter que les coordonnées internes, pas la taille de la toile elle-même. Qu'est-ce que je rate?
var ready = require('enyo/ready'),
kind = require('enyo/kind'),
Toolbar = require('onyx/Toolbar'),
Application = require('enyo/Application'),
Button = require('enyo/Button');
ready(function() {
var MySample = kind({
name: "MySample",
rendered: function() {
this.inherited(arguments);
c = this.$.myCanvas.hasNode();
b = this.$.myCanvas.getBounds()
//c.width = b.width;
//c.height = b.height;
console.log(c.width);
},
buttonTapped: function(inSender, inEvent) {
this.render();
return true;
},
components: [{
classes: "main",
components: [{
classes: "content",
components: [{
classes: "canvas",
tag: "canvas",
name: "myCanvas"
}, {
classes: "label",
content: "This text should be on 1 line, but wrap when canvas == min-width"
}]
}, {
kind: Button,
ontap: "buttonTapped",
content: "Render",
}]
}],
});
app = new Application({
view: MySample
});
});
.main {
position: relative;
margin: 0px;
padding: 0px;
box-sizing: border-box;
background: red;
}
.content {
order: 0;
display: flex;
background: yellow;
flex: 1 1 auto;
}
.canvas {
padding: 4px;
margin: auto;
min-width: 100px;
flex: 1 1 auto;
height: 40px;
background: blue;
box-sizing: border-box;
}
.label{
flex: 0 1 auto;
}
J'étais conscient de handleResize, mais dans le projet actuel, il n'est jamais appelé sur ces contrôles. Le contrôle en question a 6 ou 7 niveaux de profondeur, et j'utilise un contrôle de type séparateur pour permettre le redimensionnement horizontal des deux zones principales. En essayant de comprendre pourquoi il n'est jamais appelé, j'ai réalisé que le séparateur n'appelait pas resize() sur les deux zones principales. Je l'ai modifié pour appeler resize(), mais handleResize n'est toujours pas appelé sur ce contrôle. Cependant, il fonctionne maintenant correctement. D'une manière ou d'une autre, appeler le redimensionnement sur son grand, génial, ..., grand-parent le fait fonctionner. –