我有三个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));
答案 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