過去幾天我一直在思考這個問題,同時我可以找到其他人有過這樣的問題,這些問題是圍繞使用動態變量名字,這些解決方案都不適合我所要做的。使用變量的內容作爲標識符將數據分配給共享對象
我一直在使用一個共享對象(用於這個提供的名稱sfSaveData)來創建一個本地保存文件。這個系統在多個項目中使用得相當開心,但代碼不是太便攜。也就是說,對於每個項目,我必須完全更改類文件以合併每個要存儲的設置/數據。所以我有這個腦波 - 而不是手動更改創建/更新本地保存文件的類,我將把必要的更改放在XML文件中,並且有一個類循環遍歷XML並在共享對象內創建必要的數據。
我已經意識到事情的XML方面,我的問題是得到的結果正確引用共享對象。以下是我的工作正常:
爲了完整起見,這是XML文件的一個摘錄,目前正在執行此操作我只使用該文件中的這一個條目(沒有意義添加更多數據直到它的工作)
<dataField label = "dataField">
<dataTitle label = "dataTitle">locationArray</dataTitle>
<dataType label = "dataType">Array</dataLabel>
<dataContent label = "dataContent">[true, true, true, true, true]</dataContent>
</dataField>
注意:DataPass是一個自定義事件,它允許與事件傳遞數據。在這個例子中,它傳遞一個包含XML內容的變量。數據可通過變量event.datPass訪問。這是正確傳輸。
這是在一個類文件(SaveDataHandler)中,包含共享對象的文件是InGameSettings。 SaveDataHandler被創建爲一個實例。 InGameSettings是一個填充了公共靜態變量的公共類(包括sfSaveData:SharedObject)。對於它的價值,文件夾結構是/ data/SaveDataHandler和/ setting/InGameSettings。現在
function processSaveXML(event:DataPass):void {
var outputString;
for each (var dataField.XML in event.datPass) {
outputString = (InGameSettings.sfSaveData.data." + dataField.dataTitle);
/*
* This is where it all goes wrong ;)
* To access outputString's content as the variable name, I use "this".
* I realise that this causes outputString to relate to the SaveDataHandler
* class rather than the InGameSettings class - which is part of the problem
*/
this[outputString] = dataField.dataContent;
InGameSettings.sfSaveData.flush();
} // for each loop
} // function processSaveXML
如果我手動鍵入變量名中的一個 - 例如
InGameSettings.sfSaveData.LocationArray = dataField.dataContent
代替
this[outputString] = dataField.dataContent
它工作正常。我的問題是,我不知道如何獲取outputString的內容作爲不同類的變量的標識符。我得到的是錯誤信息:
ReferenceError: Error #1056: Cannot create property InGameSettings.sfSaveData.data.locationArray on data.SaveDataHandler.
所以,如果你能指出我正確的方向,我會非常感激。由於這個原因,本週我已經失去了很多頭髮,但是我真的希望得到這個工作,以便在我的代碼中完成一個令人討厭的黑客攻擊,所有這些都被硬編碼到SaveDataHandler類中。
感謝您的Vesper - 我有這種感覺,這將是那些簡單的事情,我一直在尋找了錯誤的方式圍繞一個。感謝你的回答,我今晚可以睡得很好。 –