我已经找到了一些特定于jQuery的答案,但与Ember.Js无关。我对Ember还很陌生,所以我可能错过了一些明显的东西,所以如果是这样的话,我很糟糕。
我在控制器中使用如下操作创建了一个可点击的div:
goHere: function(article) {
this.transitionTo('view-article',{article_id: article.article_id});
}
但现在我在div中的锚不起作用了。知道怎么绕过这个吗?
编辑:我不能向你展示所有的代码,因为这是一个巨大的项目,但基本上我们有主题,每个主题都是一系列的文章。文章在主页上列出如下:
<div class="article pull-left span10"{{action goHere this}} >
...
<a href="url.com">XX</a>
...
</div>
当点击该锚点标签时,会触发goHere操作,而不是重定向到url.com
尝试
goHere: function(article) {
this.transitionToRoute('view-article',article);
}
如果这不起作用,那么jsbin/jsfiddle将有助于提供更多上下文。
请参阅:http://emberjs.com/api/classes/Ember.Controller.html#method_transitionToRoute
不赞成在控制器中使用transitionTo,但它应该与折旧警告一起使用。使用transitionToRoute(如@RyanHirsch的回答)是正确的方法。
你可以更好地使用linkTo助手
{{#linkTo 'view-article' model_to_be_passed}}Go to View Article {{/linkTo}}
在我的案例中,我使用的是用户输入的链接,这些链接被服务器上的rails_autolink转换为锚标记,所以我无法将链接替换为ember链接。
我只需几步就可以解决这个问题。首先,我将类autolink
添加到使用autolink生成的所有链接中。然后在周围div的Ember操作中,我做了:
if event.target.className == 'autolink'
@send('handleAutolink')
else
// (handle non-link click)
然后在ApplicationRoute上,我为handleAutolink操作放入了一个处理程序,它基本上取消了ember操作,并用javascript:打开了链接
handleAutolink: ->
event.preventDefault()
window.open(event.target.href, '_blank')
我意识到这可能是一个巨大的黑客攻击,但我很高兴听到另一种方法!