"controller:edit-category.tabs" 模型上的 Observer 未触发

您好,

我正在尝试观察 EditCategoryTabs 控制器的模型变化,但不知何故,没有任何反应:

import { observes } from "@ember-decorators/object"
import { withPluginApi } from "discourse/lib/plugin-api"

function initialize(api) {
  api.modifyClass(
    "controller:edit-category.tabs",
    (Superclass) =>
      class extends Superclass {
        @observes("model.parent_category_id")
        onParentCategoryChange() {
          console.log("当父类别更改时应用一些逻辑");
        }
      }
  );
}

export default {
  name: "new-category-permissions",
  initialize() {
    withPluginApi(initialize);
  },
}

我尝试了很多方法,但仍然无法在模型更改时触发观察者。有什么我遗漏的可以解释如何正确做到这一点吗?

作为背景,我使用的是 Discourse 3.5.1,通过官方启动器构建。

感谢您的帮助!

我查看了你的链接,控制器已移至 /admin: discourse/app/assets/javascripts/admin/addon/controllers/edit-category/tabs.js at main · discourse/discourse · GitHub

我不确定为什么它没有触发。也许 @observesmodifyClass 中效果不佳?

作为替代方案,你觉得下面这个怎么样:

@action
saveCategory(data) {
  const oldParentId = this.model.parent_category_id;
  super.saveCategory(data);
  const newParentId = this.model.parent_category_id;

  if (oldParentId !== newParentId) {
    console.log("当父类别更改时在此处应用一些逻辑");
  }
}
3 个赞

感谢 @Arkshine 的查看!我已编辑帖子以反映新的文件位置。

我也考虑过覆盖 saveCategory,但在那种情况下,我想在表单修改后立即应用逻辑。我甚至尝试观察 formData 的变化(但没有成功)。