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

b5lpy0ml  于 2022-11-23  发布在  其他
关注(0)|答案(3)|浏览(149)

我的路由器已连接到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);

但是我需要在哪里为这个动作绑定事件侦听器呢?

lskq00tm

lskq00tm1#

根据您执行此操作的方式,您可以使用操作处理程序-请参阅此处:Ember - handling actions in views
检视事件行程常式的完整清单如下:
http://emberjs.com/api/classes/Ember.View.html#toc_event-names
如果你能使用其中一个预定义的处理程序,那么它无疑会是一个更简洁的逻辑。然而,听起来你可能无法做到这一点,因为你不是通过用户交互直接将文本输入到div中。然后你需要做的是,在你的didInsertElement方法中,有一个jQuery循环来检查要更新的div的内容,然后在内容更新时运行滚动。

0wi1tuuw

0wi1tuuw2#

Ember不鼓励事件绑定,而是通过事件委托来捕获用户事件。
在您的情况下,可以将代码放在View中。
例如,假设我有一个应用程序模板:

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

然后,您可以在ApplicationView中捕获单击事件,例如:

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

uyto3xhc3#

我需要观察模型的变化,并在变化后添加滚动到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')

相关问题