자습서에서는 다룰 수 없지만 'this'가 슬라이드 쇼 자습서의 서페이스 배치 동작에 어떻게 영향을 미치는지 혼란 스럽습니다. 이것은 'slideView'이다 :이 예의famo.us 슬라이드 쇼 자습서에서 'this'사용
/* * SlideView/
define(function(require, exports, module) {
var View = require('famous/core/View');
var Surface = require('famous/core/Surface');
var Transform = require('famous/core/Transform');
var StateModifier = require('famous/modifiers/StateModifier');
var ImageSurface = require('famous/surfaces/ImageSurface');
var SlideData = require('data/SlideData');
// SlideView constructor function
// runs once for each new instance
function SlideView() {
View.apply(this, arguments);
this.rootModifier = new StateModifier({
size: this.options.size
});
this.mainNode = this.add(this.rootModifier);
_createBackground.call(this);
_createFilm.call(this);
_createPhoto.call(this);
}
SlideView.prototype = Object.create(View.prototype);
SlideView.prototype.constructor = SlideView;
SlideView.DEFAULT_OPTIONS = {
size: [400, 450],
filmBorder: 15,
photoBorder: 3,
photoUrl: SlideData.defaultImage
};
function _createBackground(){
var background = new Surface({
// undefined size will inherit size from parent modifier
properties: {
backgroundColor: '#FFFFF5',
boxShadow: '0 10px 20px -5px rgba(0, 0, 0, 0.5)'
}
});
this.mainNode.add(background);
}
function _createFilm() {
this.options.filmSize = this.options.size[0] - 2 * this.options.filmBorder;
var film = new Surface({
size: [this.options.filmSize, this.options.filmSize],
properties: {
backgroundColor: '#222',
zIndex: 1
}
});
var filmModifier = new StateModifier({
origin: [0.5, 0],
align: [0.5, 0],
transform: Transform.translate(0, this.options.filmBorder, 1)
});
this.mainNode.add(filmModifier).add(film);
}
function _createPhoto() {
var photoSize = this.options.filmSize - 2 * this.options.photoBorder;
var photo = new ImageSurface({
size: [photoSize, photoSize],
content: this.options.photoUrl,
properties: {
zIndex: 2
}
});
this.photoModifier = new StateModifier({
origin: [0.5, 0],
align: [0.5, 0],
transform: Transform.translate(0, this.options.filmBorder + this.options.photoBorder, 2)
});
this.mainNode.add(this.photoModifier).add(photo);
}
module.exports = SlideView;
});
3 개면, 배경, 필름 및 사진이있다. 배경은 표면 수정자를 사용하지 않고 필름은 표면 수정자를 사용하지만 'this'에 구속되지 않으며 사진은 'this'에 바인딩 된 표면 수정자를 사용합니다. 왜 사진은 '이'에 바인딩되어야하지만 영화에는 바인딩되지 않아도됩니까? 나는 그것을 시도하고 명확히하기 위해 조금 놀았지만 그 행동은 정말로 엉뚱한 것입니다.
실력있는 분들께 감사드립니다. 가장 많이 혼란스럽게 여기는 것은 'this'제본을 제거한 후 으로 변경하면됩니다. 'var photoModifier' 사진이 필름에서 분리되어 화면의 왼쪽 상단에 나타납니다. 또한 필름을 수정하여 만들 때 'this.filmModifier' 전혀 렌더링되지 않습니다. 나는 그곳에서 일어나는 일들을 이해하지 못하고있다. –