Famo.us将事件传递给另一个视图

时间:2014-07-06 21:21:47

标签: famo.us

我有三个js文件,AppView,NavigationMenuView和HeaderView。

我在NavigationMenuView中按下按钮时尝试将事件发送到My HeaderView。这是我到目前为止所得到的。当我在导航视图中单击一个按钮时,会发出一个名为" settings"的事件。然后Appview抓住了这个事件。我很难尝试将此事件传递给HeaderVew。 代码如下。

谢谢

AppView代码

function AppView() {
    View.apply(this, arguments);
    this.menuToggle = false;

    CreateHeaderView.call(this);
    CreateNavigatinMenuView.call(this);
    SetListeners.call(this);
}

AppView.prototype = Object.create(View.prototype);
AppView.prototype.constructor = AppView;

function CreateHeaderView() {
    this.HeaderView = new HeaderView();
    this.HeaderModifier = new StateModifier();

    this.add(this.HeaderModifier).add(this.HeaderView);
}

function CreateNavigatinMenuView() {
    this.NavigationView = new NavigationMenuView();
    this.NavigationViewModifier = new StateModifier();
    this.NavigationViewModifier.setTransform(
        Transform.translate(-dimensions[0], 0, 0), {}
        );

    this.add(this.NavigationViewModifier).add(this.NavigationView);
}

function SetListeners() {
    this.NavigationView.on('settings', function () {
        //HERE IS WHERE I WHOULD EMIT TO HEADER VIEW
    }.bind(this.HeaderView));
}

module.exports = AppView;

});

APPVIEW

function SetListeners() {
    this.settingsButton.on('click', function () {
        this._eventOutput.emit('settings');
    }.bind(this));

}

HeaderView

  context.on('settings', function () {
    alert("Test");
}.bind(this));

1 个答案:

答案 0 :(得分:0)

我假设第二个'SetListeners'来自NavigationMenuView(而不是上面提到的AppView)?

我认为在AppView中,代码应该是:

function SetListeners() {
    this.NavigationView.on('settings', function () {
        this.HeaderView._eventOutput.emit('settings');
    }.bind(this));
}

在HeaderView中:

this.on('settings, function () {
    // your code
}

famo.us上的Timbre示例还包含事件管道的良好示例: Timbre example