如何在View Ember.js中触发事件?

时间:2014-09-27 13:14:15

标签: jquery ember.js javascript-events

我在路由器中连接了socket.io服务器。

afterModel: function () {
        var self = this;

        socket.on('message', function (message) {
            // adding message to Ember.DS 
        }
}

Ember将消息附加到div,但当滚动变为显示时,我需要让Ember向下滚动它。我可以用jQuery这样做

Ember.$('.messages-area').scrollTop(1000000);

但是我需要在哪里绑定事件监听器才能执行此操作?

3 个答案:

答案 0 :(得分:1)

根据您的操作方式,您可以使用操作处理程序 - 请参阅此处:Ember - handling actions in views

视图事件处理程序的完整列表如下:

http://emberjs.com/api/classes/Ember.View.html#toc_event-names

如果您可以使用其中一个预定义的处理程序,那么它无疑将是更清晰的逻辑。但是,听起来您可能无法做到这一点,因为您没有通过用户交互直接将文本输入到div中。你需要做的是,在你的didInsertElement方法中,有一个jQuery循环来检查正在更新的div的内容,然后在内容更新时运行滚动。

答案 1 :(得分:0)

Ember不鼓励事件绑定,而是通过事件委派捕获用户事件。

在您的情况下,您可以将代码放在View。

例如,假设我有一个应用程序模板:

<div id="div1">Click this area</div>
<div id="div2">Click this area</div>

然后您可以在ApplicationView中捕获click事件,例如

click:function(event){ 
   if(event.target.attr('id')==='div1'){
         //do stuff here
   }
}

答案 2 :(得分:0)

我需要观察模型的更改,并在更改后向下滚动到Ember运行循环中。

recordsDidChanges: function(){
    Ember.run.schedule('afterRender',this, function(){
        var msgArea = $('.messages-area');
        if (msgArea[0]) {
            msgArea.scrollTop(msgArea[0].scrollHeight);
        }
    });
}.observes('controller.records.@each')