合法的に選択する前に、別のチェックボックスを選択する必要があるチェックボックスがあります。チェックボックスの選択が違法な場合は、選択を解除したいと思います。コードは次のようになります。
if (self.Advances()[i].Bought()) {
break;
} else {
advance.Bying(false);
$("#" + advance.Id).checkboxradio('refresh');
return;
}
ノックアウト オブジェクトと DOM の両方を調べると、上記の else がヒットしたときに、値とチェックボックスの両方が正しく設定されません。ただし、GFX は更新されていないため、チェックボックスはまだ視覚的にチェックされています。
少し実験した後、リフレッシュラインにjavascriptエラーを導入すると、実際にはすべてが期待どおりに機能することがわかりました(予想外でした)IEは次のように機能します:
if (self.Advances()[i].Bought()) {
break;
} else {
advance.Bying(false);
//parent is not a check box, so error is thrown.
$("#" + advance.Id).parent().checkboxradio('refresh');
return;
}
これにより、JQMが間違った順序でトリガーされると信じるようになりました(つまり、上記で手動で行った更新は、マウスイベントからの更新の前にトリガーされます)
したがって、setTimeoutを使用して次の(機能するが洗練されていない)ソリューションになりました。
if (self.Advances()[i].Bought()) {
break;
} else {
setTimeout(function () {
advance.Bying(false);
$("#" + advance.Id).checkboxradio('refresh');
}, 250);
return;
}
私の質問はとにかく、JQMに正しい順序でリフレッシュを強制することができますか? それとも、これは JQM のバグですか、それとも JQM の仕組みについて理解できないことがありますか?
編集: コード全体 (およびサイト) は civ.testmaskin.com にあります。