初めて Dart を試していますが、エラー処理がうまくいきません。ここにそれに関するいくつかの情報があります。
資力:
- HTML、CSS、Dart を使用した Gist: gist.github.com/enjikaka/8164610
- プロジェクトの ZIP: ge.tt/6StW4cB1/v/0?c
- CodePen の JavaScript バージョン: codepen.io/enjikaka/pen/giurk
どのように私はそれをしたい:
画像ソースが 403 エラー コードを返した場合、MinecraftSkin のインスタンスを作成すると StateError がスローされます。例外は、MineCraft スキンのインスタンスを作成しようとする generateHead() 関数で処理する必要があります。
それはどうですか:
MineCraft プレーヤーのスキンを表す画像が存在しない場合 (画像ソースが存在せず、403 が返される場合)、コードは 22 行目 (onError; StateError をスローする場所) で停止し、コンソールに「Breaking on exception: Bad」を出力します。状態: ユーザーにはスキンがありません".
ただし、generateHead の catch では、何も実行されません。プロンプトを表示しても StateError メッセージは出力されず、DOM で選択された要素に StateError メッセージが挿入されません。
コード
import 'dart:html';
class MinecraftSkin {
String user;
CanvasElement ce = new CanvasElement();
void _generateCanvas(Event e) {
CanvasRenderingContext2D ctx = ce.getContext('2d');
ctx.imageSmoothingEnabled = false;
ctx.drawImageScaledFromSource((e.target as ImageElement),8,8,8,8,0,0,ce.width,ce.height);
}
CanvasImageSource getHead() => ce;
String name() => user;
MinecraftSkin(String minecraftUser, num size) {
user = (minecraftUser == null) ? 'Notch' : minecraftUser;
ce.width = size;
ce.height = size;
ImageElement img = new ImageElement()
..onLoad.listen(_generateCanvas)
..onError.listen((_) => throw new StateError('User has no skin'));
img.src = "http://s3.amazonaws.com/MinecraftSkins/"+user+".png";
}
}
void generateHead(Event e) {
MinecraftSkin ms;
try {
ms = new MinecraftSkin((querySelector('#userName') as InputElement).value, 128);
} on StateError catch(se) {
print(se.message);
querySelector('#status').text = se.message;
}
CanvasElement cems = ms.getHead();
cems.id = "mc" + ms.name();
cems.title = "mc" + ms.name();
document.body.append(cems);
querySelector('#status').text = "Got head!";
}
void main() {
querySelector('#generateHead').onClick.listen(generateHead);
}
前もって感謝します!
敬具、ジェレミー