javascript - ember.js 路由刷新后滚动到聊天框底部

标签 javascript ember.js

我正在构建一个 ember 应用程序,其中包含类似电子邮件的消息传递功能。

当用户发送消息时,容器应该滚动 到底部以显示新消息。这是创建新消息的操作

  createMessage(messageParams) {
    this.get('store').createRecord('message', messageParams).save()
    .then(() => {
      return this.refresh()
    })
    .then(() => {
        let objDiv = document.getElementById("message-container");
        objDiv.scrollTop = objDiv.scrollHeight;
    })
    .catch(() => {
      this.get('flashMessages')
        .danger('There was a problem. Please try again.');
    });

到目前为止,当新消息出现在容器中时,聊天框不会滚动到底部。当我在设置的超时时间内将代码包装在第二个 .then 中时,它会起作用。

我应该将容器滚动到底部的代码放在路由文件中的其他位置吗?我尝试将其放入 afterModel Hook 中。我还尝试将其放在模型 Hook 之后的 .then 中。当我这样做时,在导航到应用程序中的路线时,我得到了一个空白的白页。

model(params) {
    return Ember.RSVP.hash({
      messages: this.get('store').query('message', {
        id: params.conversation_id
      }),
      conversation: this.get('store').find('conversation', params.conversation_id)
    }).then(() => {
      let objDiv = document.getElementById("message-container");
      objDiv.scrollTop = objDiv.scrollHeight;
    });
  }

最佳答案

在 didTransition 钩子(Hook)中,您可以在渲染队列后的运行循环中运行 DOM 代码。

didTransition() {
  Ember.run.later('afterRender', () => {
    let objDiv = document.getElementById("message-container");
    objDiv.scrollTop = objDiv.scrollHeight;
  }, 100);
  return true;
},

DOM 操作代码应该放在组件中,我更喜欢您编写用于显示消息的组件并使用组件生命周期 Hook 方法(即,在您的情况下 didRender 最适合)

关于javascript - ember.js 路由刷新后滚动到聊天框底部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44991424/

相关文章:

ember.js - Ember CLI : custom input helper

model-view-controller - EmberJS : Good separation of concerns for Models, 在相当复杂的应用程序中存储、 Controller 、 View ?

javascript - 循环内有多个YouTube播放器实例

javascript - Angular JS 处理 Ng 重复的 HTML5 视频和 $SCE

javascript - ember js 中的 Flash 消息不起作用。创建 Flash 对象时 undefined object

node.js - 从 Node + Express REST 服务器获取 JSON 时 Ember 数据中断

javascript - ember-model、ember-reSTLess 和 emu 之间的主要区别(优点/缺点)是什么?

javascript - 内置排序比手工排序慢?

javascript - 将 Javascript 语法错误和 console.log 重定向到其他地方

javascript - 在 JavaScript 中对数组索引执行架构验证