我找到了一些特定于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
答案 0 :(得分:3)
尝试
goHere: function(article) {
this.transitionToRoute('view-article',article);
}
如果这不起作用,jsbin / jsfiddle会对更多上下文有所帮助。
请参阅:http://emberjs.com/api/classes/Ember.Controller.html#method_transitionToRoute
答案 1 :(得分:2)
不推荐在控制器中使用transitionTo,但它应该与折旧警告一起使用。 使用transitionToRoute(如在@RyanHirsch中的答案)是正确的方法。
您可以更好地使用linkTo helper
{{#linkTo 'view-article' model_to_be_passed}}Go to View Article {{/linkTo}}
答案 2 :(得分:0)
在我的情况下,我使用的是用户输入的链接,这些链接在服务器上由rails_autolink转换为锚标记,因此我无法用ember link-to替换链接。
我能够通过几个步骤来解决这个问题。首先,我将类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')
我意识到这可能是一个巨大的黑客,但我很乐意听到另一种方法!