Ember.js 你如何抓住一个';单击';在使用视图的{{linkTo}}上?

Ember.js 你如何抓住一个';单击';在使用视图的{{linkTo}}上?,ember.js,Ember.js,(注意:我使用的是Ember版本1.0.0-rc.3) 我试图用一个视图捕捉{{linkTo}}的“点击”,这样除了加载新模板外,我还可以做其他事情(基本上是滚动侧边栏中的用户列表)。由于我对这一点比较陌生(但已经阅读了文档!),我认为以下方法可以奏效: “用户”模板: {{#each user in users}} {{#view App.ClickView}} {{#linkTo user user}}{{ user.name }}{{/linkTo}} {{

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

{{#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>
对于上下文,布局模板:

{{#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 user}{{user.name}{{{/linkTo}}
{{/每个}}
{{outlet}}
回到用户模板,您可以看到每个
{{linkTo}
都包含在一个视图中。我期待着在{{linkTo}}上的一次点击会出现,并被视图捕获(
App.ClickView
)。不幸的是,事实并非如此。当点击发生在
{{linkTo}}
上时,它似乎没有以某种方式冒泡到视图中。。。我该怎么办

注#1: 如果我用
元素替换
{{linkTo}}
仅在div#main!我不打算替换div#侧栏中的元素),它会工作,并且点击会被视图捕获。然而,我不太确定我是否想走这条路(我必须复制
{{linkTo}}
!)的功能)。我认为应该有更好的方法来做到这一点。有吗

注意#2
*注意,我也知道我可以将我想要的“do stuff”代码放在UserRoute的renderTemplate()中,但问题是,这种效果会发生在指向该路由的每个链接上(包括侧边栏中的链接,这不是我想要的)。我希望滚动只触发特定的
{{linkTo}
s,特别是div#main中的
{linkTo}
s。我建议在视图中使用带有
{action…target=“view”}
的锚()标记,而不是linkTo,在视图中应用条件逻辑,然后如果合适,重新发送给控制器(
this.get('controller').send(actionName)
,让它冒泡到路由器,并在路由器事件处理程序中进行转换。

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

我想你说重新发送到控制器只是因为你需要将它发送到路由器?(而不是因为你建议让控制器来处理这个动作,在这种情况下,它不会出现在路由器上)。另外:具体到我的用例,你知道有没有办法找到给定模型的路由吗?因此,在我的例子中,我不会用
元素替换侧栏中的
链接到
(这是我使用
{{action…}}
必须做的事情)。我想使用
$('a[href=“model.route”]”之类的东西找到正确的链接
。我同意Luke的观点。Linkto用于转换设置上下文。事件不会按您希望的方式处理。另一方面,我不明白Luke提供的答案为什么不好。@Jeffrey'jf'Lim是的,发送给控制器,因为您的视图不应该关心谁将最终处理该操作。您的implemeAntion会让它冒泡到路由器,你会在那里处理它。我没有上下文来回答你的其他问题。也许它应该有自己的问题吗?@LukeMelia,我编辑了这个问题。现在它更容易阅读,我希望上下文更清楚。我想我可以去掉关于定位
{linkTo}的问题
在侧边栏中添加到它自己的SO问题中;但由于它是主要问题的一部分,也是我为什么要首先问这个主要问题的原因…@EduárdMoldován“事件将不会按照您希望的方式处理。”什么?谢谢你的解释!我想你说重新发送到控制器只是因为你需要将它发送到路由器?(而不是因为你建议让控制器处理操作,在这种情况下它不会向路由器冒泡)另外:具体到我的用例,你知道有没有任何方法可以找到给定模型的路线吗?所以在我的例子中,我不会用
元素替换侧栏中的
链接到
(这是我使用
{action…}
)元素所必须做的。我想找到正确的链接,使用
$('a[href=“model.route”]')
。我同意Luke的观点。Linkto用于转换设置上下文。事件不会按您希望的方式处理。另一方面,我不明白Luke提供的答案为什么不好。@Jeffrey'jf'Lim是的,发送给控制器,因为您的视图不应该关心谁将最终处理该操作。您的implemeAntion会让它冒泡到路由器,你会在那里处理它。我没有上下文来回答你的其他问题。也许它应该有自己的问题吗?@LukeMelia,我编辑了这个问题。现在它更容易阅读,我希望上下文更清楚。我想我可以去掉关于定位
{linkTo}的问题
在侧边栏中插入自己的SO问题;但既然它是主要问题的组成部分,也是我为什么要首先问这个主要问题的原因…@EduárdMoldován“事件不会按您希望的方式处理。”什么?谢谢您的解释!