MVC模式之 Controller 与 View 如何通信?
用到发布-订阅者模式
订阅者(Subscriber):想要响应事件的代码
发布者(Publisher):知道何时触发事件的代码
View中监听事件发生,真正的事件处理要在Controller里面。现在的问题是:事件处理函数controlRecipe()
在Controller当中,用于渲染菜谱;addHandlerRender
在RecipeView中,但是不能直接在RecipeView中调用Controller里面的controlRecipe
,因为在MVC架构中,View不会导入(import)Controller的。
发布-订阅模式:RecipeView作为发布者,Controller作为订阅者,发布者甚至不知道订阅者的存在。(View无法访问Controller当中的内容)。
we can subscribe to the publisher by passing into subscriber function as an argument.
我们将订阅者的函数作为参数传递给发布者。当init()函数启动时,把controlRecipe作为参数传入addHandlerRender. So we subscribe controlRecipe to addHandlerRender,以至于这两个函数连接起来了。当addHandlerRender监听事件发生时,controlRecipe会作为addEventListener的回调函数被调用。换句话说,发布者一旦发布事件,订阅者就会被调用。这让我们能够保留handler在Controller当中,listener在View当中,分离开来了。