我目前正在使用EmberJS处理地图应用程序,使用ember-leaflet来显示地图。请参阅此jsFiddle以了解我当前的设置:
我的问题是,只有当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
路由,正如预期的那样,/places
和zoom
的观察者不会被调用。之后,您转到isCloseEnough
,观察员按预期工作。但是我不明白的是,为什么回到/places/new
后,观察者和他们/places
仍然活跃?我以为Ember
答案 0 :(得分:2)
向控制器发送动作。
您可以通过控制器弹出操作。
(抱歉,切换到jsbin,jsfiddle不适合我的屏幕)
http://emberjs.jsbin.com/AguxORAD/3/edit
就个人而言,我放弃了新的路由/控制器,这似乎很奇怪,因为所有真实的逻辑都存在于某些地方,你必须来回代理信息,但这取决于你。
答案 1 :(得分:0)
我已经找到了一个很好的解决方案来解决这个问题,并提供了来自主销答案和this video的提示。重点是,视图中的每个事件都会触及当前路径。因此,地图始终委托click事件。但是,它可以是PlacesRoute
或PlacesNewRoute
中处理的处理路线。因此PlacesNewController
执行所有场所创建逻辑,PlacesController
执行索引逻辑等等。我认为这是一个很好的起点。
这是一个jsFiddle,显示了我上面描述的当前解决方案。
@kingpin:谢谢你的帮助