我需要在Ember.js中合并linkTo和操作助手。我的代码是:
{{#link-to 'index'}}<span {{action 'clear'}}>Clear</span>{{/link-to}}
但我想把它变成这样:
{{#link-to 'index' {{action 'clear'}} }}Clear{{/link-to}}
还有:
<li>
{{#link-to 'support'}}
<span {{action 'myAction' 'support'}}>Support</span>
{{/link-to}}
</li>
收件人:
<li>
{{#link-to 'support' {{action 'myAction' 'support'}} }}Support{{/link-to}}
</li>
我如何才能做到这一点?
溶液
Check my answer forEmber 2.0 compatible,OK for SEO solution.
9条答案
按热度按时间tgabmvqs1#
Ember链接动作附加元件
这是确定的SEO解决方案!
安装附加元件
用法
您可以将闭包操作作为
invokeAction
参数传递给{{link-to}}
组件:要将参数传递给操作,可以用途:
兼容性
自动化测试套件确认,插件工程与1.13最新的Ember 3版本。
它适用于Ember的发布版、测试版和金丝雀版。
Addon GitHub repository.欢迎大家投稿。
dgsult0t2#
**更新:**请参阅Michael Lang对Ember 1.8.1+的评论
Myslik的答案(根本不使用
link-to
,而是使用action
,然后transitionToRoute
)的问题是,它对SEO毫无用处,搜索引擎机器人将什么也看不到。如果你想让你的链接指向的内容被索引,最简单的方法是在里面放一个好的旧的
<a href=x>
。最好使用link-to
,这样你的链接URL和你的路径URL保持同步。我使用的解决方案既提供了一个操作来完成这项工作,又提供了一个方便的link-to
来索引页面。我覆盖了
Ember.LinkView
的一些功能:然后,我可以在Handlebar中指定要执行的操作以及要传递的操作:
在控制器中:
这样,当我缓存页面的呈现副本并将其提供给索引机器人时,机器人将看到一个带有URL的真实的链接并跟踪它。
(note此外,现在不赞成使用
transitionTo
,而赞成使用transitionToRoute
)c3frrgcw3#
这些组合在Ember.js中都不起作用,但您不需要合并这两个助手。为什么不直接使用action helper,让它冒泡到controller或route呢?在controller中可以使用
transitionToRoute
,在route中可以使用transitionTo
。例如,在controller中,您可以使用如下代码:
qlckcl4x4#
这在1.6.0-beta.5中运行良好:
链接将发生,然后点击将弹出到操作处理程序。
8i9zcol25#
我喜欢Cereal Killer的方法,因为它很简单,但不幸的是,它给我带来了一个问题。当浏览器导航到另一个路径时,它会 * 重新启动Ember应用程序 *。
从Ember 2.6开始,下面的简单方法就可以实现:
<span {{action 'closeNavigationMenu'}}> {{#link-to 'home' preventDefault=false}} Go Home {{/link-to}} </span>
这实现了以下目的:
6za6bjd06#
有同样的问题,我发现这个简单的解决方案:
然后,在样式表中管理css类external-button和internal-button,我确保“internal-button”覆盖了整个“external-button”区域;以这种方式,不可能在不点击内部按钮的情况下点击外部按钮。
对我来说效果很好;希望能帮上忙。
whhtz7ly7#
这就是我在O'Reilly Ember.js书的演示应用程序中解决这个问题的方法:https://github.com/emberjsbook。
您可以在此处查看完整的源代码:https://github.com/emberjsbook/rocknrollcall
在视图中:
和控制器:
tyu7yeag8#
这是在Ember 3.11.0中使用
on
修改器后的外观。显示
bubbles
只是为了说明LinkTo API。https://blog.emberjs.com/ember-3-11-released/
wlzqhblo9#
Ember的link-to标记使用路径来打开新视图,因此您可以执行任何您想放在目标路径的
setupController
方法中的链接的'action'属性中的功能,而不是放在控制器操作中。请参阅Ember指南中的以下内容:http://emberjs.com/guides/routing/setting-up-a-controller/
这仅在您希望每次访问路由时都执行该操作时有效,但与特定链接相反。
请确保包括
controller.set('model', model);
行沿着您在其中放置的任何其他内容。