次のコードは、Error #1009: Cannot access a property or method of a null object reference
を投げるshoud:この奇妙な現象を再現するMXMLデータバインディングがTypeErrorsを呑み込むのはなぜですか?
public function set buggySetter(value:String):void {
var label:Label;
label.text = value; //will fail silently
}
を、:それはバインディングMXMLデータによって設定されたセッターの内側かどう
var label:Label;
label.text = value;
はしかし、それはしていませんまず、拡張sが単純なカスタムコンポーネントを作成します。レーベル:
package {
import spark.components.Label;
public class BuggyLabel extends Label {
public function set buggySetter(value:String):void {
var label:Label;
label.text = value; //will fail silently
}
}
}
Sectondは、アプリケーションとバインドbuggにBuggyLabelを追加ySetter:
<fx:Script>
<![CDATA[
[Bindable]
public var foo:String = 'NULL has no properties';
]]>
</fx:Script>
<local:BuggyLabel buggySetter="{foo}"/>
なぜこのアプリは黙って失敗するのですか?
1 ...場合は、あなたのコードは、仕事かもしれません。これは正しいことであり、ほとんどの場合、実際にこれが起こることを望んでいます。バインディングの性質は、(キー:最終的に)が来るときに変化を検出することです。私たちの大多数は、Viewと一緒にバインディングを設定しています。そして、データを保持するメディエータやモデルで一度割り当てられた実際の作業を行うことを期待しています。バインディングがこれをしなかったならば、私たちはボイラープレート延期方法の束を書かなければならなくなりました - これにより、私たちのコードはもっと手続き的になりました。 –
しかし、普通のユースケースを処理するために例外を使用するのはひどい考えです。エラーだけのすべてのインスタンスを作成するオーバーヘッドは私を震えます。 – DuneCat