1

(注意:我使用的是 Ember 版本 1.0.0-rc.3)

我试图捕捉{{linkTo}}使用视图的“点击”,以便除了加载新模板之外,我还可以做其他事情(基本上是滚动侧边栏中的用户列表)。我对此相对较新(但已阅读文档!),我认为以下内容会起作用:

“用户”模板:

{{#each user in users}}
    {{#view App.ClickView}}
        {{#linkTo user user}}{{ user.name }}{{/linkTo}}
    {{/view}}
{{/each}}

视图代码:

App.ClickView = Ember.View.extend({
    click: function(evt) {
        // do stuff
    }
});

对于上下文,布局模板:

<div id='sidebar'>
    {{#each user in users}}
        {{#linkTo user user}}{{ user.name }}{{/linkTo}}
    {{/each}}
</div>

<div id='main'>
    {{ outlet }}
</div>

回顾users 模板,您可以看到每个模板{{linkTo}}都包含在一个视图中。我期待点击该 {{linkTo}} 会因此冒泡并被视图 ( App.ClickView) 捕获。不幸的是,事实并非如此。当点击发生在...上时,似乎没有以某种方式冒泡到视图中{{linkTo}}。我该怎么办?

注意#1:如果我用一个元素替换{{linkTo}}在div#main中!我不打算替换div#sidebar中的那些)<a>,它会起作用,并且点击会被视图捕获。但是,我不太确定我想走这条路(我必须复制{{linkTo}}!的功能)。我认为应该有更好的方法来做到这一点。有没有?

注意#2:*请注意,我也知道我可以将我想要的“做东西”代码放在UserRoute的renderTemplate()中,但问题是该效果将发生在该路由的每个链接(包括侧边栏中的那些 - 这不是我想要的)。我希望滚动只触发特定{{linkTo}}的 s - 特别是{{linkTo}}div#main 中的 s。

4

1 回答 1

1

我建议使用其中的锚 (<a>) 标记{{action ... target="view"}}而不是 linkTo,在视图中应用条件逻辑,然后如果合适,重新发送到控制器 ( this.get('controller').send(actionName),让它冒泡到路由器,然后执行路由器事件处理程序中的 transitionTo。

于 2013-05-16T17:33:07.510 回答