У меня возникла проблема с изменением размера системы координат холста при использовании Flexbox и Enyo. См. Пример: http://jsfiddle.net/g7MLS/1989/Размер холста с помощью Flexbox и Enyo
Когда вы впервые запускаете его, все в порядке. Уменьшите ширину поля, а строка текста останется 1 строка, пока холст не достигнет минимальной ширины, затем текст начнет обертываться.
Чтобы увидеть проблему, раскомментируйте строки:
C.WIDTH = b.width;
c.height = b.height;
Теперь Flexbox использует внутреннюю координатную ширину, чтобы расположить вещи ... или что-то еще. Теперь текст начнет обертывание до того, как холст сжимается до минимальной ширины.
Я не могу дублировать точную установку без Эньо, но это близко и, кажется, не делать то же самое: https://jsfiddle.net/ez6b2q8v/103/
Я так понимаю, устанавливая холст ширина/высота должна влиять только внутренние координаты, а не размер самого холста. Что мне не хватает?
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;
}
Мне было известно о handleResize, но в фактическом проекте он никогда не получает вызова этих элементов управления. Этот элемент управления находится на уровне 6 или 7 уровней, и я использую элемент управления сплиттера, чтобы разрешить горизонтальное изменение размеров двух основных областей. При попытке выяснить, почему он никогда не звонил, я понял, что сплиттер не вызывал изменение размера() в двух основных областях. Я изменил его, чтобы вызвать resize(), но handleResize до сих пор не вызывается в этом элементе управления. Это, однако, теперь правильно работает. Каким-то образом, вызывая изменение размера на своем великом, великом, ..., дедушка и бабушка заставляют его работать. –