No creo que entienda lo que significa dimensionar un nodo famo.us con un true
tamaño.
En este ejemplo, estoy tratando de centrar una Vista con un tamaño fijo. Pero eventualmente quiero que estos BlueView calculen su tamaño según su contenido y tengan una variedad de ellos en una vista de desplazamiento.
Entonces, supongo que mis preguntas son:
Que hace true
tamaño realmente significa? ¿Cuál es la matemática detrás de esto? Asumo que un tamaño de true
activa el nodo, blueModifier
, para obtener ese valor de su nodo hijo directo, en este caso mi blueView
ejemplo. ¿Me equivoco?
Si ese es el caso, ¿cómo puedo obtener BlueView "s para publicar su tamaño? Leer la fuente de famo.us y su documentación es simplemente confuso. Parece que si un View
tiene solo un hijo, debe usar el tamaño de ese niño. O puede usar setOptions()
en una vista para establecer su tamaño. O puedes anular una vista getSize()
función. Pero no puedo hacer que ninguno de ellos funcione.
function BlueView() {
View.call(this)
this
.add(new Modifier({
size: [400, 200],
origin: [0, 0],
align: [0, 0]
}))
.add(new Surface({
properties: {
backgroundColor: "blue"
}
}));
};
BlueView.prototype = Object.create(View.prototype);
BlueView.prototype.constructor = BlueView;
var blueModifier = new Modifier({
size: [true, true],
origin: [0.5, 0.5],
align: [0.5, 0.5],
});
var blueView = new BlueView();
mainContext.add(blueModifier).add(blueView);
http://jsbin.com/gopeli/1/edit?html,output
Respuestas
1 para la respuesta № 1Dimensionamiento en Famo.us
Puede ser confuso realmente rápido (versión actual 0.3.5
). Todos esperamos que solucionen esto en MixedMode
. Aquí hay un intento de explicarlo para tratar de aclararlo.
Tipos de tamaño:
- Cierto -
[true, true]
- Indefinido
[undefined, undefined]
- Actual -
[Xpx, Ypx]
p.ej.[100, 100]
Cada uno de estos tiene un fragmento que puede ver los tamaños devueltos en un clic de la BlueView
. Me tomé la libertad de refactorizar extendiendo View
, para que podamos acceder a los renderables de los ejemplos.
Cierto
Tamaño real en Famo.us
es una forma de decirle a tu rendidor el tamaño de la misma. contents
. Básicamente es el equivalente a tener una <div>
Sin altura y anchura. El rendidor no obtiene el tamaño directamente del niño, por lo que no hay matemáticas aquí. El desarrollador debe entender que el tamaño puede no ser transparente para el getSize
método al usar True
dimensionamiento.
Puede haber formas de obtener el tamaño real de la interpretación, pero depende de cómo y cuándo se representa en el contexto. Un buen momento puede ser en el despliegue de lo rendible, y obtener el real true
tamaño de la target
.
define("main", function(require, exports, module) {
var Engine = require("famous/core/Engine");
var View = require("famous/core/View");
var Surface = require("famous/core/Surface");
var StateModifier = require("famous/modifiers/StateModifier");
var Modifier = require("famous/core/Modifier");
var BlueView = require("BlueView");
var mainContext = Engine.createContext();
// Grid lines to show the center of the context.
var sizeShow = new Surface({
content: "Click BlueView Surface to get sizes",
size: [true, true],
properties: {
backgroundColor: "rgba(0,0,0,0.15)"
}
});
var outerBlueBack = new Surface({
size: [undefined, undefined],
properties: {
backgroundColor: "rgba(0,0,255,0.15)"
}
});
var horizontalRule = new Surface({
content: "",
size: [undefined, 1],
properties: {
backgroundColor: "#aaaaaa"
}
});
var verticalRule = new Surface({
content: "",
size: [1, undefined],
properties: {
backgroundColor: "#aaaaaa"
}
});
var originModifier = new StateModifier({
origin: [0.5, 0.5],
align: [0.5, 0.5]
});
var node = mainContext.add(originModifier);
node.add(verticalRule);
node.add(horizontalRule);
var sizeBlueModifier = new Modifier({
//size: [true, true]
//size: [undefined, undefined]
size: [400, 200]
});
var centerBlueModifier = new Modifier({
origin: [0.5, 0.5],
align: [0.5, 0.5],
});
var blueView = new BlueView({
content: "set to true",
size: [true, true]
});
blueView.on("deploy", function() {
var sizeInfo = sizeShow.getContent() + "<br/><hr>";
var target = this.surface._currentTarget;
var targetSize = [target.clientWidth, target.clientHeight];
sizeInfo += "target size = " + targetSize;
sizeShow.setContent(sizeInfo);
});
blueView.on("click", function(e) {
console.log(e);
var target = e.target;
var targetSize = [target.clientWidth, target.clientHeight];
var sizeInfo = "target size = " + targetSize + "<br/><hr>";
sizeInfo += "BlueView size = " + this.sizeMod.getSize() + "<br/>";
sizeInfo += "BlueView.sizeMod = " + this.sizeMod.getSize() + "<br/>";
sizeInfo += "BlueView.surface = " + this.surface.getSize() + "<br/><hr>";
sizeInfo += "sizeBlueModifier = " + sizeBlueModifier.getSize() + "<br/>";
sizeInfo += "outerBlueBack = " + outerBlueBack.getSize() + "<br/>";
sizeShow.setContent(sizeInfo);
});
mainContext.add(sizeShow);
var centerBlueNode = mainContext.add(centerBlueModifier);
var outerBlueNode = centerBlueNode.add(sizeBlueModifier);
outerBlueNode.add(outerBlueBack);
centerBlueNode.add(blueView);
});
define("BlueView", function(require, exports, module) {
var View = require("famous/core/View");
var Surface = require("famous/core/Surface");
var Modifier = require("famous/core/Modifier");
function BlueView(options) {
View.apply(this, arguments);
this.sizeMod = new Modifier({
size: this.options.size,
});
this.placeMod = new Modifier({
origin: this.options.origin,
align: this.options.align
});
this.surface = new Surface({
content: this.options.content,
properties: {
backgroundColor: "blue",
cursor: "pointer"
}
});
this
.add(this.sizeMod)
.add(this.placeMod)
.add(this.surface);
this.surface.pipe(this._eventOutput);
};
BlueView.DEFAULT_OPTIONS = {
size: [undefined, undefined]
};
BlueView.prototype = Object.create(View.prototype);
BlueView.prototype.constructor = BlueView;
module.exports = BlueView;
});
require(["main"]);
<script src="http://requirejs.org/docs/release/2.1.16/minified/require.js"></script>
<script src="http://code.famo.us/lib/requestAnimationFrame.js"></script>
<script src="http://code.famo.us/lib/classList.js"></script>
<script src="http://code.famo.us/lib/functionPrototypeBind.js"></script>
<link rel="stylesheet" type="text/css" href="http://code.famo.us/famous/0.3.5/famous.css" />
<script src="http://code.famo.us/famous/0.3.5/famous.min.js"></script>
Indefinido
El tamaño indefinido le dice al rendidor a tamañoes "s" padre ". En este caso, el tamaño debe ser referenciado por el padre. Si no sabe quién es el padre, siempre puede obtener el tamaño de la versión de destino real después del despliegue.
Nota: Cuando el size
es no configurarlo es como establecer indefinido.
define("main", function(require, exports, module) {
var Engine = require("famous/core/Engine");
var View = require("famous/core/View");
var Surface = require("famous/core/Surface");
var StateModifier = require("famous/modifiers/StateModifier");
var Modifier = require("famous/core/Modifier");
var BlueView = require("BlueView");
var mainContext = Engine.createContext();
// Grid lines to show the center of the context.
var sizeShow = new Surface({
content: "Click BlueView Surface to get sizes",
size: [true, true],
properties: {
backgroundColor: "rgba(0,0,0,0.15)"
}
});
var outerBlueBack = new Surface({
size: [undefined, undefined],
properties: {
backgroundColor: "rgba(0,0,255,0.15)"
}
});
var horizontalRule = new Surface({
content: "",
size: [undefined, 1],
properties: {
backgroundColor: "#aaaaaa"
}
});
var verticalRule = new Surface({
content: "",
size: [1, undefined],
properties: {
backgroundColor: "#aaaaaa"
}
});
var originModifier = new StateModifier({
origin: [0.5, 0.5],
align: [0.5, 0.5]
});
var node = mainContext.add(originModifier);
node.add(verticalRule);
node.add(horizontalRule);
var sizeBlueModifier = new Modifier({
//size: [true, true]
//size: [undefined, undefined]
size: [200, 200]
});
var centerBlueModifier = new Modifier({
origin: [0.5, 0.5],
align: [0.5, 0.5],
});
var blueView = new BlueView({
content: "set to undefined",
size: [undefined, undefined]
});
blueView.on("deploy", function() {
var sizeInfo = sizeShow.getContent() + "<br/><hr>";
var target = this.surface._currentTarget;
var targetSize = [target.clientWidth, target.clientHeight];
sizeInfo += "target size = " + targetSize;
sizeShow.setContent(sizeInfo);
});
blueView.on("click", function(e) {
console.log(e);
var myTarget = e.target;
var myTargetSize = [myTarget.clientWidth, myTarget.clientHeight];
var sizeInfo = "target size = " + myTargetSize + "<br/><hr>";
sizeInfo += "BlueView size = " + this.sizeMod.getSize() + "<br/>";
sizeInfo += "BlueView.sizeMod = " + this.sizeMod.getSize() + "<br/>";
sizeInfo += "BlueView.surface = " + this.surface.getSize() + "<br/><hr>";
sizeInfo += "sizeBlueModifier = " + sizeBlueModifier.getSize() + "<br/>";
sizeInfo += "outerBlueBack = " + outerBlueBack.getSize() + "<br/>";
sizeShow.setContent(sizeInfo);
});
mainContext.add(sizeShow);
var centerBlueNode = mainContext.add(centerBlueModifier);
var outerBlueNode = centerBlueNode.add(sizeBlueModifier);
outerBlueNode.add(outerBlueBack);
outerBlueNode.add(blueView);
});
define("BlueView", function(require, exports, module) {
var View = require("famous/core/View");
var Surface = require("famous/core/Surface");
var Modifier = require("famous/core/Modifier");
function BlueView(options) {
View.apply(this, arguments);
this.sizeMod = new Modifier({
size: this.options.size,
});
this.placeMod = new Modifier({
origin: this.options.origin,
align: this.options.align
});
this.surface = new Surface({
content: this.options.content,
properties: {
backgroundColor: "blue",
cursor: "pointer"
}
});
this
.add(this.sizeMod)
.add(this.placeMod)
.add(this.surface);
this.surface.pipe(this._eventOutput);
};
BlueView.DEFAULT_OPTIONS = {
size: [undefined, undefined]
};
BlueView.prototype = Object.create(View.prototype);
BlueView.prototype.constructor = BlueView;
module.exports = BlueView;
});
require(["main"]);
<script src="http://requirejs.org/docs/release/2.1.16/minified/require.js"></script>
<script src="http://code.famo.us/lib/requestAnimationFrame.js"></script>
<script src="http://code.famo.us/lib/classList.js"></script>
<script src="http://code.famo.us/lib/functionPrototypeBind.js"></script>
<link rel="stylesheet" type="text/css" href="http://code.famo.us/famous/0.3.5/famous.css" />
<script src="http://code.famo.us/famous/0.3.5/famous.min.js"></script>
Real
El tamaño real se explica por sí mismo. [100, 100]
Dice para hacer los 100 píxeles rendibles en width
por 100 píxeles en height
.
define("main", function(require, exports, module) {
var Engine = require("famous/core/Engine");
var View = require("famous/core/View");
var Surface = require("famous/core/Surface");
var StateModifier = require("famous/modifiers/StateModifier");
var Modifier = require("famous/core/Modifier");
var BlueView = require("BlueView");
var mainContext = Engine.createContext();
// Grid lines to show the center of the context.
var sizeShow = new Surface({
content: "Click BlueView Surface to get sizes",
size: [true, true],
properties: {
backgroundColor: "rgba(0,0,0,0.15)"
}
});
var outerBlueBack = new Surface({
size: [undefined, undefined],
properties: {
backgroundColor: "rgba(0,0,255,0.15)"
}
});
var horizontalRule = new Surface({
content: "",
size: [undefined, 1],
properties: {
backgroundColor: "#aaaaaa"
}
});
var verticalRule = new Surface({
content: "",
size: [1, undefined],
properties: {
backgroundColor: "#aaaaaa"
}
});
var originModifier = new StateModifier({
origin: [0.5, 0.5],
align: [0.5, 0.5]
});
var node = mainContext.add(originModifier);
node.add(verticalRule);
node.add(horizontalRule);
var sizeBlueModifier = new Modifier({
//size: [true, true]
//size: [undefined, undefined]
size: [200, 200]
});
var centerBlueModifier = new Modifier({
origin: [0.5, 0.5],
align: [0.5, 0.5],
});
var blueView = new BlueView({
content: "Actual<br/>[100, 100]",
size: [100, 100]
});
blueView.on("click", function(e) {
console.log(e);
var target = e.target;
var targetSize = [target.clientWidth, target.clientHeight];
var sizeInfo = "target size = " + targetSize + "<br/><hr>";
sizeInfo += "BlueView size = " + this.sizeMod.getSize() + "<br/>";
sizeInfo += "BlueView.sizeMod = " + this.sizeMod.getSize() + "<br/>";
sizeInfo += "BlueView.surface = " + this.surface.getSize() + "<br/><hr>";
sizeInfo += "sizeBlueModifier = " + sizeBlueModifier.getSize() + "<br/>";
sizeInfo += "outerBlueBack = " + outerBlueBack.getSize() + "<br/>";
sizeShow.setContent(sizeInfo);
});
mainContext.add(sizeShow);
var centerBlueNode = mainContext.add(centerBlueModifier);
var outerBlueNode = centerBlueNode.add(sizeBlueModifier);
outerBlueNode.add(outerBlueBack);
centerBlueNode.add(blueView);
});
define("BlueView", function(require, exports, module) {
var View = require("famous/core/View");
var Surface = require("famous/core/Surface");
var Modifier = require("famous/core/Modifier");
function BlueView(options) {
View.apply(this, arguments);
this.sizeMod = new Modifier({
size: this.options.size,
});
this.placeMod = new Modifier({
origin: this.options.origin,
align: this.options.align
});
this.surface = new Surface({
content: this.options.content,
properties: {
backgroundColor: "blue",
cursor: "pointer"
}
});
this
.add(this.sizeMod)
.add(this.placeMod)
.add(this.surface);
this.surface.pipe(this._eventOutput);
};
BlueView.DEFAULT_OPTIONS = {
size: [undefined, undefined]
};
BlueView.prototype = Object.create(View.prototype);
BlueView.prototype.constructor = BlueView;
module.exports = BlueView;
});
require(["main"]);
<script src="http://requirejs.org/docs/release/2.1.16/minified/require.js"></script>
<script src="http://code.famo.us/lib/requestAnimationFrame.js"></script>
<script src="http://code.famo.us/lib/classList.js"></script>
<script src="http://code.famo.us/lib/functionPrototypeBind.js"></script>
<link rel="stylesheet" type="text/css" href="http://code.famo.us/famous/0.3.5/famous.css" />
<script src="http://code.famo.us/famous/0.3.5/famous.min.js"></script>