2015-10-05 75 views
1

我使用Backbone.js。我有popup1,它创建popup2。 popup2是类似组件的,当它关闭时触发事件'school_address:saved'。我需要在'school_address:saved'事件中向服务器发送请求。我在popup1(它的实例仍然存在)的视图中放置了这样做的处理程序,但我不确定这个地方是否合适,因为视图负责模板UI逻辑,是不是?单一责任原则和Backbone.View

你认为这样的代码最好的地方是什么?如果我使用Marionette.js会怎样?

+0

你有什么模型在你的意见?可以将这个“对服务器的请求”与模型中的数据相关吗?如果是这样,我认为这个逻辑的最佳位置是在模型内部,而视图将只是这个模型中的监听事件。 – antejan

+0

你有什么模型在你的意见? - 是的,在每个弹出窗口中。但由于popup2的“componential”性质,我不能修改它的模型,因为只有在popup1实例化popup2时,才需要对popup2的事件。 – dortonway

+0

可以将这个“对服务器的请求”与模型中的数据相关吗? - 不,这是一个空的请求。只是为了提醒服务器,popup2已被处理。 – dortonway

回答

0

我们一直在使用BackboneJS了几年了,并想知道在过去的类似案件......

由于BackboneJS(不像其他JS框架)不强制这样做的任何常用的方式,我会一般认为这取决于你的实现和应用程序流程。

然而,因为这些弹出窗口/“应用模态”,我认为如果你考虑以下根据您当前的需要,这将有助于:

  1. 如果只是popup1,可以实例化和显示popup2,然后让popup1 listenTo popup2触发的事件。

  2. 如果您预见到您的应用程序流发生了变化,并且可能使popup2显示在其他地方或独立显示,我建议您从更高级别的视图(可能是您有路由)收听popup2事件。这样,您的两个弹出窗口都将是“独立的”,您可以更轻松地回收他们的代码,并随着应用程序的增长支持更大的灵活性。

+0

不仅popup1可以实例化并显示popup2,但只有在popup1时才需要发送该请求。 由于可以在不同的“环境”中创建弹出窗口,因此无法在较高级别的视图中侦听该事件。 所以根据你的回答,我想我的选择是正确的(把处理程序放在popup1上)。 但是,你为什么不认为路由器是合适的? – dortonway

+0

在不同的“环境”中 - 我的意思是不同的页面。由于该项目的具体情况,没有布局视图,我也不确定,由于其整体性,这样的地方是适当的。 – dortonway

+0

如果它是一个“普通”侦听器,等待来自popup2的事件,那么您可以将该代码放在任何地方。它不必在任何视图中 - 它可以简单地在某处使用全局函数绑定,不一定来自路由器内... 如果事件是从多个地方触发的(不仅在popup2内),我会简单地传递另一个参数以及事件有效载荷,以区分从popup2或其他应用程序中出现的触发器,以及事件功能检查有效负载中提供的值的条件。 –

相关问题