gpt4 book ai didi

javascript - @bindable changeHandler 在绑定(bind)完成更新之前触发

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:01:51 27 4
gpt4 key购买 nike

代码:

App.js

export class App {
constructor() {
this.widgets = [{ name: 'zero'}, {name: 'one'}, {name:'two'}];
this.shipment = { widget: this.widgets[1] };
}
}

App.html

<template>
<require from="./widget-picker"></require>
<require from="./some-other-component"></require>

<widget-picker widget.bind="shipment.widget" widgets.bind="widgets"></widget-picker>
<some-other-component widget.bind="shipment.widget"/>
</template>

widget-picker.js

import {bindable, bindingMode} from 'aurelia-framework';

export class WidgetPicker {
@bindable({ defaultBindingMode: bindingMode.twoWay, changeHandler: 'widgetChanged' })
widget;

@bindable widgets;

widgetChanged(widget) {
// Use an Event Aggregator to send a message to SomeOtherComponent
// to say that they should check their widget binding for updates.
}
}

widget-picker.html

<select value.bind="widget">
<option repeat.for="widget of widgets" model.bind="widget">${widget.name}</option>
</select>

问题:

@bindable 的 changeHandler 在绑定(bind)更新到 App.js 及其 this.shipment.widget 之前触发 widgetChanged 事件.

所以当 Event Aggregator 消息发出时,之前的值仍然设置在 `this.shipment.widget' 上。

问题:

有没有办法让 @bindable 的 changeHandler 等到所有将为 @bindable 更新的绑定(bind)都完成?

或者我可以使用另一个回调吗?也许是 changedHandler(过去式)?

我确实尝试将 change.delegate="widgetChanged" 添加到 select 中,希望 delegate 选项会使它变慢,但在更新完全推出之前它仍然会触发。

最佳答案

你可以将你需要做的工作推送到微任务队列中:

import {bindable, bindingMode, inject, TaskQueue} from 'aurelia-framework';

@inject(TaskQueue)
export class WidgetPicker {
@bindable({ defaultBindingMode: bindingMode.twoWay, changeHandler: 'widgetChanged' })
widget;
@bindable widgets;

constructor(taskQueue) {
this.taskQueue = taskQueue;
}

widgetChanged(widget) {
this.taskQueue.queueMicroTask(
() => {
// Use an Event Aggregator to send a message to SomeOtherComponent
// to say that they should check their widget binding for updates.
});
}
}

这将确保它在事件循环的同一“回合”发生(而不是像 setTimeout(...) 这样的事情)。

关于javascript - @bindable changeHandler 在绑定(bind)完成更新之前触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35587033/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com