ember.js 黑暗模式功能,在init()中更改img src不起作用

nlejzf6q  于 2022-11-23  发布在  其他
关注(0)|答案(1)|浏览(126)

在控制器中我有

init(){
    this._super(...arguments);
    document.body.classList.add("darkMode");
    document.getElementById('mode').src = 'assets/images/logo-white'
  }

在车把中:

<img id="mode" src="assets/images/logo-black.png" alt="white-theme" width="188px" height="56px">

当我尝试在我的项目中应用一个黑暗主题时,我成功地添加了这个类,但是当我试图通过查找其id来更改logo img src时,它崩溃了(因为没有任何东西显示了),这可能是因为**init()**在加载实际图像之前做了所有的事情,并且不能从img中获取id。我还没有解决这个问题的方法,所以任何想法都很棒。

  • 我这样做只是为了测试,稍后我将添加一个if子句来测试用户是否希望启用暗模式 *
ldxq2e6h

ldxq2e6h1#

正确。任何组件示例的init挂钩都将在正确构造组件的DOM(模板)之前执行,因此我们此时无法访问DOM。您可以将所有与DOM相关的逻辑移到组件的另一个生命周期挂钩didInsertElement中,该挂钩仅在构造DOM之后调用。
This twiddle应该会对您有所帮助!
但是,建议将模板设置为声明性的,而不是手动更新DOM,以避免意外的错误。

<img src={{if this.isDarkTheme "logo-white.png" "logo-white"}} width="188px" height="56px">

因此更改状态isDarkTheme就足以跟踪所有相关的DOM/UI片段。

相关问题