【问题标题】:how do you catch a 'click' on a {{linkTo}} using a view?您如何使用视图捕获 {{link To}} 上的“点击”?
【发布时间】:2013-05-15 16:09:05
【问题描述】:

(注意:我使用的是 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>

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

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

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

【问题讨论】:

    标签: ember.js


    【解决方案1】:

    【讨论】:

    • 我假设您说重新发送到控制器只是因为您需要将其发送到路由器? (而不是因为您建议让控制器处理该操作,在这种情况下它不会冒泡到路由器)。另外:针对我的用例,您是否知道是否有任何方法可以找到给定模型的路线?所以就我而言,我不会用&lt;a&gt; 元素替换侧边栏中的linkTos(这是我使用{{ action ... }} 所必须做的)。我想找到正确的链接使用 something 比如$('a[href="model.route"]').
    • 我同意卢克的观点。 Linkto 用于转换设置上下文。事件不会按照您希望的方式处理。另一方面,我不明白为什么卢克提供的答案不好。
    • @Jeffrey'jf'Lim 是的,发送给控制器,因为您的视图不应该关心谁将最终处理该操作。您的实现将让它冒泡到您将处理它的路由器。我没有上下文来回答你的其他问题。也许它应该有自己的 SO 问题?
    • @LukeMelia,我已经编辑了这个问题。现在更容易阅读,我希望上下文更清晰。我想我可以把关于在侧边栏中定位{{linkTo}} 的问题放到它自己的 SO 问题中;但因为它是主要问题不可或缺的一部分,这也是我什至首先提出这个主要问题的原因......
    • @EduárdMoldován “事件不会按照你希望的方式处理。”什么?谢谢你的解释!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-18
    • 2013-02-04
    • 1970-01-01
    相关资源
    最近更新 更多