Ember.js Emberjs+;把手+;对象onchange和事件

Ember.js Emberjs+;把手+;对象onchange和事件,ember.js,handlebars.js,Ember.js,Handlebars.js,我发现jQuery观察器并没有绑定到handlebar逻辑中未显示的元素 假设我有以下几点: {{#if person}} Welcome back, <b>{{person.firstName}} {{person.lastName}}</b>! {{else}} Please <a class="login">log in</a>. {{/if}} <script> $('.login').click(function()

我发现jQuery观察器并没有绑定到handlebar逻辑中未显示的元素

假设我有以下几点:

{{#if person}}
  Welcome back, <b>{{person.firstName}} {{person.lastName}}</b>!
{{else}}
  Please <a class="login">log in</a>.
{{/if}}

<script>
$('.login').click(function() {
    alert("Hi there.");
});
</script>
{{#if person}
欢迎回来{{person.firstName}{{person.lastName}}!
{{else}
请登录。
{{/if}
$('.login')。单击(函数(){
警惕(“你好。”);
});
如果我在控制台中运行person=null(或者任何需要证明person为空的东西),则登录观察者无法工作。我已经在使用embers didInsertElement()加载其他一些东西,但是是否有一个“onChange”事件可以挂接,以便重新绑定事件观察者?

最大的问题是为什么要这样做?Ember对点击处理程序有极好的内置支持,无需通过jQuery。您的
无法工作的原因可能是由于ember将视图插入DOM的延迟方式。执行
Ember.View.append()
操作时,稍后将在DOM中插入元素

这就是说,这里有一个fiddle,它完成了我认为您希望在
diInsertElement()
中附加jQuery click处理程序的功能

但是,余烬的方法是只使用
click
隐式处理程序函数:


注意:后一个处理程序连接到周围的把手
div
,而不是
a
,而是单击气泡。

您面临的问题是javascript只能绑定到dom中存在的元素。添加新元素后,它希望您重新绑定这些事件。幸运的是,jQuery在这一点上是您的朋友

<script>
$('body').on('click', '.login', function() {
    alert("Hi there.");
});
</script>

$('body')。在('click','login',function()上{
警惕(“你好。”);
});

理想情况下,您的选择器是与
.login
最接近的父级,javascript不会添加该父级。如果您不确定

嗨,Michael,以上是安全的赌注。我想你还不明白我的问题。我发现事件处理程序只适用于可见的部分。就拿我的第一个例子来说。。如果person存在并返回true,并且我还有一个jQuery观察器,它像so$('.login)一样启动。现在-通过webkit控制台将person更改为false,然后尝试并单击链接。它不会开火。
click: function () {
    alert("Hi there.");
}
<script>
$('body').on('click', '.login', function() {
    alert("Hi there.");
});
</script>