无法通过Ember JS中的did-update更新跟踪的属性

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

我尝试在我的模板中使用did-update来从另一个组件触发我的组件中的一个动作。我以前做过这个,但是从来没有用一个更新跟踪属性的动作。
我正在尝试显示一个模式窗口,该窗口的显示依赖于tracked属性。
我尝试使用该组件中未在另一个函数中调用的另一个跟踪属性,但得到了相同的错误。
是否可以通过此方法更新跟踪的属性?

// template
{{did-update this.triggerShare @showShareModal}}

// component
@tracked isShareOpen = false;
@action
triggerShare() {
  this.isShareOpen = !this.isShareOpen;
}

出现以下错误

index.js:172 Uncaught (in promise) Error: Assertion Failed: You attempted to update `isShareOpen` on `ListingShareComponent`, but it had already been used previously in the same computation.  Attempting to update a value after using it in a computation can cause logical errors, infinite revalidation bugs, and performance issues, and is not supported.

`isShareOpen` was first used:

- While rendering:
  ----------------
    (instance of a `(unknown object)` modifier)
dsekswqp

dsekswqp1#

对于其他人遇到的宝石Ember帽子赋予我们的奇怪金块,谢天谢地,它有一个简单的解决方案。我不知道为什么,但ember不喜欢的切换功能,我把属性设置为相反的值本身。
我将toggle函数分为open函数和close函数,显式地将值设置为true或false,这样就可以工作了。

// template
{{did-update this.triggerShare @showShareModal}}

// component
@tracked isShareOpen = false;

@action
openShare() {
  this.isShareOpen = true;
}
@action
closeShare() {
  this.isShareOpen = false;
}

相关问题