- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
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/
我正在检查日期值的变化。 ValueChangeHandler 正在识别日期(例如,2014 年 1 月 5 日在输入时更新到数据库)。但是,当我删除日期时,它无法被识别(即,数据库未更新为空 - 我
这个问题在这里已经有了答案: Add a property to a JavaScript object using a variable as the name? [duplicate] (14
我有以下代码来刷新多个项目。这一切都是异步发生的。 func refresh(_ types: [DataTypes], callback: ((String) -> Void)?) { le
代码: App.js export class App { constructor() { this.widgets = [{ name: 'zero'}, {name: 'one'},
我正在使用 CasperJS 为旧版 GWT (2.3) 代码编写测试。 我可以更改列表框的选定值。 document.querySelector('#id_of_select').selectedI
我是一名优秀的程序员,十分优秀!