Javascript 在MVC模式中,什么';在我的视图类中,避免调用控制器的最佳方法是什么?

Javascript 在MVC模式中,什么';在我的视图类中,避免调用控制器的最佳方法是什么?,javascript,optimization,model-view-controller,Javascript,Optimization,Model View Controller,我一直在用拉斐尔在画布上画形状。绘制之后,我需要为每个形状添加一个事件侦听器。最简单的方法是使用以下内容: sym.click((e)=>{ this._controller.responseFunction(e); }); 这并不可怕,但它确实意味着我的观点将永远需要我的控制器的知识。是否有更好的方法添加事件侦听器 发布-订阅模式是您场景中的一个想法: sym.click((e) => { pubSub.fireEvent('sym.clic

我一直在用拉斐尔在画布上画形状。绘制之后,我需要为每个形状添加一个事件侦听器。最简单的方法是使用以下内容:

    sym.click((e)=>{
        this._controller.responseFunction(e);
    });

这并不可怕,但它确实意味着我的观点将永远需要我的控制器的知识。是否有更好的方法添加事件侦听器

发布-订阅模式是您场景中的一个想法:

sym.click((e) => {
   pubSub.fireEvent('sym.click', ...yourArguments)
});
然后在控制器中,您可以通过以下方式收听:

pubSub.subscribe('sym.click', myhandlerFunction)
其中,
myhandlerFunction
是一个使用提供的参数处理事件的函数

这样,您的视图就不需要对控制器进行实际引用,而且它将更加解耦。此场景中唯一需要的参考是发布订阅机制

你可以自己实现这个机制(网上有很多例子)或者使用一个库,比如,等等