路线变更后儿童控制器观察员仍然有效

时间:2013-12-14 20:49:08

标签: ember.js

我目前正在使用EmberJS处理地图应用程序,使用ember-leaflet来显示地图。请参阅此jsFiddle以了解我当前的设置:

http://jsfiddle.net/HUnnr/1/

我的问题是,只有当PlacesNewController路线处于打开状态时,我才会将点击事件委托给/places/new

我的第一次尝试 委派来自click的{​​{1}}个活动 - > MapView - > PlacesController,但在我更改路线后,也确实处理了点击事件并向地图添加了标记,因为PlacesNewController仍然存在。

我的第二次尝试 然后我尝试了Embers PlacesNewController mixin。我从Evented - >委派了该活动后MapView,我触发了一个事件。我在PlacesController上将PlacesNewController绑定到此活动,并在PlacesNewRoute.activate上取消绑定。主要问题是,我无法从事件处理函数访问PlacesNewRoute.deactivate的模型。

上述两种解决方案似乎都不是“蠢货”。我认为这样的事情有更好的解决方案。也许有人可以帮我解决这个问题。我认为,直接将地图事件委托给PlacesNewController这样的事情将是最干净的解决方案,但我不知道如何用Ember实现这一点。

修改 这是一个新的jsBin: http://emberjs.jsbin.com/uHOPOfi/23/edit

主要问题是,如果您第一次访问PlacesNewController路由,正如预期的那样,/placeszoom的观察者不会被调用。之后,您转到isCloseEnough,观察员按预期工作。但是我不明白的是,为什么回到/places/new后,观察者和他们/places仍然活跃?我以为Ember

2 个答案:

答案 0 :(得分:2)

向控制器发送动作。

您可以通过控制器弹出操作。

(抱歉,切换到jsbin,jsfiddle不适合我的屏幕)

http://emberjs.jsbin.com/AguxORAD/3/edit

就个人而言,我放弃了新的路由/控制器,这似乎很奇怪,因为所有真实的逻辑都存在于某些地方,你必须来回代理信息,但这取决于你。

答案 1 :(得分:0)

我已经找到了一个很好的解决方案来解决这个问题,并提供了来自主销答案和this video的提示。重点是,视图中的每个事件都会触及当前路径。因此,地图始终委托click事件。但是,它可以是PlacesRoutePlacesNewRoute中处理的处理路线。因此PlacesNewController执行所有场所创建逻辑,PlacesController执行索引逻辑等等。我认为这是一个很好的起点。

这是一个jsFiddle,显示了我上面描述的当前解决方案。

@kingpin:谢谢你的帮助