2012-02-26 40 views
4

我发现jQuery的观察员未结合到未在车把逻辑中所示的元件。Emberjs +把手+对象平变化和事件

比方说,我有以下几点;

{{#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> 

如果我在控制台中,人= NULL(或说服那人是空的任何需要真实)中运行 - 登录观察者不起作用。我已经使用余烬didInsertElement()来加载一些其他的东西,但有一个“onChange”事件我可以挂钩,所以我可以重新绑定事件观察员?

回答

1

最大的问题是为什么你想要的? Ember具有出色的内置支持点击处理程序,而无需通过jQuery。你的<script>不工作的原因很可能是由于ember将视图插入到DOM中的延迟方式。当您执行Ember.View.append()时,元素将在稍后插入到DOM中。

这就是说,这是一个小提琴,我想你想要附加在didInsertElement()中的jQuery点击处理程序。

http://jsfiddle.net/algesten/5LPPz/1/

didInsertElement: function() { 
    // appending click handler directly with jQuery 
    $('.login').click(function() { 
     alert("Hi there."); 
    }); 
} 

然而余烬的方法是只使用click隐含的处理函数:

http://jsfiddle.net/algesten/5LPPz/2/

click: function() { 
    alert("Hi there."); 
} 

注:后者处理程序附加到周围的车把div而不是a,但点击泡泡。

+0

迈克尔喜。我不认为你已经理解我的问题。我发现事件处理程序只适用于可见的部分。以我的第一个例子..如果人存在并返回true,并且我还有一个jQuery观察者,它像$('。login).click()加载在didInsertElement()上一样触发。现在 - 通过webkit控制台将人员更改为false,然后尝试单击该链接。它不会着火。 – Jamsi 2012-03-05 05:49:04

1

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

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

理想情况下,你的选择是最接近父.login不得到由JavaScript添加。以上是安全的赌注,如果你不知道