famo.us:" deploy"是什么意思?在famo.us中的功能?

时间:2014-05-20 19:26:02

标签: famo.us

我见过人们在famo.us中对Surface类进行子类化并且它们覆盖deploy函数的示例。这是famo.us在可渲染物上需要的特殊功能吗?我有一个 我正在构建的“控件”,它有一些我希望在它变得可见时显示的动画,但我不希望它们在我实例化对象时启动,我希望它们在以后向用户显示时显示。这是deploy函数的用途吗?

2 个答案:

答案 0 :(得分:3)

披露:我可能是您见过覆盖部署的许多示例的作者。

当我使用Famo.us并需要将自己的属性添加到本机DOM元素时,我开始介绍Surface中的部署功能。 Deploy接受从ElementAllocator接收的目标元素,该元素管理DOM资源。这是Surface有机会改变任何原始DOM元素的属性以适应提供给Surface的选项。

要回答您的问题,如果您需要在屏幕上显示之前访问原始DOM元素,则只需要覆盖部署功能。但是,您只需要设置元素的不透明度,并且可以使用“deploy”事件上的表面来实现。

以下是使用事件的示例..

var Engine          = require('famous/core/Engine');
var Surface         = require('famous/core/Surface');
var StateModifier   = require('famous/modifiers/StateModifier');

var context = Engine.createContext();

var surface = new Surface({
    size:[200,200],
    content:"Hello!",
    properties: {
        backgroundColor:'green',
        color:'white',
        textAlign:'center',
        lineHeight:'200px'
    }
})

surface.on('deploy',function(){
    console.log("Deployed!");
    surface.state.setOpacity(1);
})

surface.state = new StateModifier({ origin:[0.5,0.5]});

surface.state.setOpacity(0);

context.add(surface.state).add(surface);

使用deploy事件时,您还可以看到非常有趣的内容。如果您通过Web控制台或grunt重新加载代码,并且Famo.us应用程序不是当前可见的选项卡,则不会调用部署功能。这是requestAnimationFrame的一个功能,它允许它不花费周期更新不可见的屏幕。当您最终打开选项卡时,您可以看到“已部署!”登录到控制台。

希望这有帮助!

答案 1 :(得分:2)

我不确定是否覆盖了部署方法,但我认为您正在寻找的是“部署”事件。

当曲面添加到实时dom时,确实会触发'deploy'事件。因此,对于您希望在表面位于dom树之后运行的代码:

var surface = new Surface({content: 'foo'})
surface.on('deploy', function() {
   // your code that requires surface to be in the dom
});

我不是一个famo.us开发者,所以这不是一个'官方'的答案,但我确实在源代码中看到了它并且已经开始使用它并且它有效。

来源:https://github.com/Famous/core/blob/35461b36c8d09d39e96c3d61ebd7908946d3f668/Surface.js#L451