过渡到 Octane:替换 addObserver 设计
Transition to Octane: replace addObserver design
服务执行的服务请求当前触发组件使用 addObserver 模式侦听的“通知”,即 aService 只是切换其 _property,组件使用 aService.addObserver('_property'){action.. .}。请问如何在 Octane 中重新设计此模式?谢谢你。卡雷尔
对于这种情况,我发现使用 Ember.Evented 和 pub/sub 模式很有用。
这些组件使用依赖注入来接收服务的实例,并在它们的构造函数中(或在需要时的其他地方)订阅服务上的某个“主题”。考虑一个示例,其中 publisher
服务以一致的间隔生成报价。在我们的组件中,我们想要订阅 updateTick
主题并在每次触发事件时增加我们当前的 tick
值。
import Component from '@glimmer/component';
import { inject } from '@ember/service';
import { tracked } from '@glimmer/tracking';
export default class extends Component {
@inject
publisher;
@tracked
tick = 0;
constructor(){
super(...arguments);
this.publisher.on('updateTick', () => {
this.tick = this.tick + 1;
});
}
}
当该主题有更新值时,该服务会触发一个所有订阅者都可以看到的事件。在这里,我每秒触发一个 updateTick
事件。
import Service from '@ember/service';
import Evented from '@ember/object/evented';
export default class Publisher extends Service.extend(Evented){
constructor(){
super(...arguments);
setInterval(() => {
this.trigger("updateTick");
}, 1000);
}
}
服务执行的服务请求当前触发组件使用 addObserver 模式侦听的“通知”,即 aService 只是切换其 _property,组件使用 aService.addObserver('_property'){action.. .}。请问如何在 Octane 中重新设计此模式?谢谢你。卡雷尔
对于这种情况,我发现使用 Ember.Evented 和 pub/sub 模式很有用。
这些组件使用依赖注入来接收服务的实例,并在它们的构造函数中(或在需要时的其他地方)订阅服务上的某个“主题”。考虑一个示例,其中 publisher
服务以一致的间隔生成报价。在我们的组件中,我们想要订阅 updateTick
主题并在每次触发事件时增加我们当前的 tick
值。
import Component from '@glimmer/component';
import { inject } from '@ember/service';
import { tracked } from '@glimmer/tracking';
export default class extends Component {
@inject
publisher;
@tracked
tick = 0;
constructor(){
super(...arguments);
this.publisher.on('updateTick', () => {
this.tick = this.tick + 1;
});
}
}
当该主题有更新值时,该服务会触发一个所有订阅者都可以看到的事件。在这里,我每秒触发一个 updateTick
事件。
import Service from '@ember/service';
import Evented from '@ember/object/evented';
export default class Publisher extends Service.extend(Evented){
constructor(){
super(...arguments);
setInterval(() => {
this.trigger("updateTick");
}, 1000);
}
}