是否有可能在路由事件中添加自定义操作(基本上是任何JS代码)?
有一个应用程序需要更改应用程序“外部”页面的某些部分。是的,页面的那一部分应该在应用程序中,但事实并非如此。所以,我需要在一些路由事件上稍微改变“外部”DOM。例如,当我处于索引状态时,某处有一个空元素,当我移动到另一个状态时,该元素将其内容更改为“Back”并变为活动状态。另外,我想将ember路由操作绑定到该元素上的onClick事件。
我试图找到这样的东西,但似乎什么都没有。我找到了这个,但它根本解决了我的问题: How do I bind events directly to existing HTML, without using any kind of views, in Ember.js?
感谢您的时间。
答案 0 :(得分:6)
可能有助于了解您可以在路线中处理的enter
事件:
other: Ember.Route.extend({
route: '/other',
connectOutlets: function(router, context) { /* ...? */ }),
enter: function(router) {
// ...
}
})
不确定是否有更适合您需求的解决方案。
更新:如果您使用action
帮助程序,则click事件将根据您的需要触发操作。示例 - 在模板中:<a {{action gotoOtherState href="true"}}>Go to other state</a>
,以及您所在的路径(或祖先......在这种情况下为索引路径):gotoOtherState: Ember.Route.transitionTo('path.to.otherState')
。
href=true
是<a>
代码的可选触摸。您还可以定义自己的过渡:
gotoOtherState: function(router, event) {
// Setup? Teardown?
// ...
router.transitionTo('path.to.otherState');
}
注意:如果您在动作帮助中传递了一个上下文(例如{{action gotoOtherState this}}
),则可以通过以下事件访问它:router.transitionTo('path.to.otherState', event.context);
更新2: enter
是一个隐私钩子,而activate
是一个新的公共挂钩(请参阅http://emberjs.com/blog/2013/02/15/ember-1-0-rc/)