We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
現状の polyfill コードでは onchange に関数を登録することは可能だが、削除する方法は提供されていないため、何もしない関数を代入するしか oncahnge の停止方法がない。これは通常の JS とは異なる挙動なので改善したい。
具体的には 1 度だけ onchange を検知して処理したい、処理後はハンドラを削除したい等というユースケースで実装に迷う。
https://github.com/chirimen-oh/chirimen-micro-bit/blob/master/polyfill/microBitBLE.js#L834-L841
set onchange(value) { // console.log("called setter: onchange:",value); onChangeFunc = value; changeMonitor(); }, get OnChangeFunc() { return onChangeFunc; },
普通に gpioInPort.onchage = null すると onChangeFunc に null が設定されるし changeMonitor も止まらないので。標準仕様的には null 以外でも 1 でも "text" でも非関数値を代入するとイベントハンドラは止まる。他にも delete するとかいろんな振る舞いに対して oncahnge イベントハンドラの仕様通り実装するのは大変だが、まずは、関数以外を代入したらイベントハンドラとしての振る舞いをしなくなるようにしたい。
gpioInPort.onchage = null
The text was updated successfully, but these errors were encountered:
今の実装ではonchangeでnullを入れればchangeMonitor は止るようです。 null以外駄目(あ、あとfalseとか0でも良いかも)なので、作りが雑。どこかの機会に改良すべきですね。
main.js
var microBitBle; var gpioPort2; async function connect() { microBitBle = await microBitBleFactory.connect(); msg.innerHTML = "micro:bit BLE接続しました。"; var gpioAccess = await microBitBle.requestGPIOAccess(); var mbGpioPorts = gpioAccess.ports; gpioPort2 = mbGpioPorts.get(2); await gpioPort2.export("in"); //port2 in sensing = true; gpioPort2.onchange = testChange; } async function disconnect() { await microBitBle.disconnect(); msg.innerHTML = "micro:bit BLE接続を切断しました。"; } function testChange(val) { msgTxt = val === 1 ? "High" : "Low"; // 条件 (三項) 演算子 msg.innerHTML = msgTxt; } var sensing; function switchSensing() { if (sensing == true) { gpioPort2.onchange = null; sensing = false; } else { gpioPort2.onchange = testChange; sensing = true; } }
index.html
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <title></title> </head> <script src="https://cdn.jsdelivr.net/npm/@chirimen/microbit"></script> <script src="main.js"></script> <body> <form name="js"> <input type="button" value="Connect" onclick="connect();" /> <input type="button" value="Disconnect" onclick="disconnect();" /> </form> <hr /> <div id="msg">---</div> <img src="imgs/GPIO0.png" width="400" /> <input type="button" value="switchSensing" onclick="switchSensing();" /> </body> </html>
Sorry, something went wrong.
No branches or pull requests
現状の polyfill コードでは onchange に関数を登録することは可能だが、削除する方法は提供されていないため、何もしない関数を代入するしか oncahnge の停止方法がない。これは通常の JS とは異なる挙動なので改善したい。
具体的には 1 度だけ onchange を検知して処理したい、処理後はハンドラを削除したい等というユースケースで実装に迷う。
https://github.com/chirimen-oh/chirimen-micro-bit/blob/master/polyfill/microBitBLE.js#L834-L841
普通に
gpioInPort.onchage = null
すると onChangeFunc に null が設定されるし changeMonitor も止まらないので。標準仕様的には null 以外でも 1 でも "text" でも非関数値を代入するとイベントハンドラは止まる。他にも delete するとかいろんな振る舞いに対して oncahnge イベントハンドラの仕様通り実装するのは大変だが、まずは、関数以外を代入したらイベントハンドラとしての振る舞いをしなくなるようにしたい。The text was updated successfully, but these errors were encountered: