我在路由器中连接了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);
但是我需要在哪里绑定事件监听器才能执行此操作?
答案 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')