ember.js可点击的div中的可点击链接



我已经找到了一些特定于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')

我意识到这可能是一个巨大的黑客攻击,但我很高兴听到另一种方法!

最新更新