を使用してのFlex 4とパセリの依存性の注入の問題は、私はビュークラスにEmployeeListを持っている:次のようにプレゼンテーションモデルパターン
<?xml version="1.0" encoding="utf-8"?>
<s:NavigatorContent xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:parsley="http://www.spicefactory.org/parsley"
xmlns:mx="library://ns.adobe.com/flex/mx" width="400" height="300">
<fx:Script>
<![CDATA[
import cafeparsley.model.EmployeeListPM;
[Inject]
[Bindable]
public var model : EmployeeListPM;
[Init]
public function init() : void {
model.init();
}
]]>
</fx:Script>
<s:Panel title="Employee List" horizontalCenter="0">
<s:HGroup paddingTop="50">
<s:Button label="Add New Employee" click="model.addNewEmployee()" />
<mx:Spacer width="100%" />
<s:Button label="Logout" click="model.logout()" />
<mx:Spacer width="100%" height="20" />
</s:HGroup>
<s:List id="empList" dataProvider="{ model.employees }" labelFunction="model.properName"
change="model.initUpdateEmployee(empList.selectedItem);empList.selectedIndex = -1;" width="100%" />
<s:Label id="error" color="0xFF0000" />
</s:Panel>
</s:NavigatorContent>
PMは、次のようになります。
package cafeparsley.model
{
import cafeparsley.events.EmployeeEvent;
import cafeparsley.events.NavigationEvent;
import cafeparsley.services.impl.EmployeeServiceImpl;
import cafeparsley.vo.Employee;
import flash.events.EventDispatcher;
import mx.collections.ArrayCollection;
import mx.rpc.IResponder;
[Bindable]
[Event(name="navigationEvent", type="cafeparsley.events.NavigationEvent")]
[ManagedEvents("navigationEvent")]
public class EmployeeListPM extends EventDispatcher implements IResponder
{
public var employeeService : EmployeeServiceImpl = new EmployeeServiceImpl();
public var employees : ArrayCollection;
public function init() : void
{
loadEmployees();
}
public function EmployeeListPM()
{
}
public function loadEmployees():void
{
employeeService.loadEmployees(this);
}
かかわらず、私が使用しているかどうかの
またはオートワイヤリング注入を実行するには、次のエラーメッセージが表示されます。
TypeError:Error#1009:nullオブジェクト参照のプロパティまたはメソッドにアクセスできません。 at cafeparsley.view :: EmployeeList/_EmployeeList_List1_i()[c:\ dev \ code \ workspace \ Examples \ CafeParsley \ src \ cafeparsley \ view \ EmployeeList.mxml:29] cafeparsley.view :: EmployeeList/_EmployeeList_Array2_c() at mx.core :: DeferredInstanceFromFunction/getInstance()[E:\ dev \ 4.x \ frameworks \ projects \ framework \ src \ mx \ core \ DeferredInstanceFromFunction.as:105] at spark.components :: SkinnableContainer/createDeferredContent SkinnableContainer/createContentIfNeeded()[E:\ dev \ 4]にある、[E:¥dev¥4.x¥frameworks¥projects¥spark¥src¥spark¥components¥SkinnableContainer.as:985】 です。 (E):¥dev¥4.x¥frameworks¥projects¥spark¥src¥spark¥src¥spark¥components¥SkinnableContainer.as:1014】 spark.components :: SkinnableContainer/createChildren() spark \ components \ SkinnableContainer.as:827] at mx.core :: UIComponent/initialize()[E:\ dev \ 4.x \ frameworks \ projects \ framework \ src \ mx \ core \ UIComponent.as:7349] at mx.core :: UIComponent/http ://www.adobe.com/2006/flex/mx/internal :: childAdded()[E:\ dev \ 4.x \ frameworks \ projects \ framework \ src \ mx \ core \ UIComponent.as:7241] mx.core :: UIComponent/addChildAt()[E:\ dev \ 4.x \ frameworks \ projects \ framework \ src \ mx \ core \ UIComponent.as:6947] at spark.components :: Group/addDisplayObjectToDisplayList )[E:\ dev \ 4.x \ frameworks \ projects \ spark \ src \ spark \ components \ Group.as:1825] at spark.components :: Group/http://www.adobe.com/2006/ Spark.components :: Group/setMXMLContent()でflex/mx/internal :: elementAdded()[E:\ dev \ 4.x \ frameworks \ projects \ spark \ src \ spark \ components \ Group.as:1416] [E:\ dev \ 4.x \ frameworks \ projects \ spark \ src \ spark \ components \ Group.as:512] spark.components :: Group/set mxmlContent()[E:\ dev \ 4.x \ frameworks \ projects \ spark \ src \ spark \ components \ Group.as:452] at spark.components :: SkinnableContainer/set SkinnableContainer/createDeferredContent()[E:\ dev \ 4]のmxmlContent()[E:\ dev \ 4.x \ frameworks \ projects \ spark \ src \ spark \ components \ SkinnableContainer.as:604] .x \ frameworks \ projects \ spark \ src \ spark \ components \ SkinnableContainer.as:986] at spark.components :: SkinnableContainer/createContentIfNeeded()[E:\ dev \ 4.x \ frameworks \ projects \ spark \ src \ spark \ components \ SkinnableContainer.as:1014] at spark.components :: SkinnableContainer/createChildren()[E:\ dev \ 4.x \フレームワーク\ projects \ spark \ src \ spark \ components \ SkinnableContainer.as:827 ] at spark.components :: NavigatorContent/createChildren()[E:\ dev \ 4.x \ frameworks \ projects \ spark \ src \ spark \ components \ NavigatorContent.as :225] mx.core :: UIComponent/initialize()[E:\ dev \ 4.x \ frameworks \ projects \ framework \ src \ mx \ core \ UIComponent.as:7349] at cafeparsley.view :: EmployeeList/initialize()
したがって、エラーがスローされるとemployeeListPMはnullになります。しかし、 <s:List>
コンポーネントをコメントアウトして、initメソッドでブレークポイントを再実行して設定すると、init()が呼び出されます。だから、私のコンテキスト設定が間違っているというわけではありません。PMが時間内に注入されておらず、エラーがスローされただけです。しかし、私はautowiringまたは<parsley:configure/>
を使用する場合、パースレーのマニュアルによると、PMは必要な時に注入する必要があります。
私は、私が考えていたものが、比較的単純な依存性注入シナリオであるとは思えません。手伝ってくれますか?