2012-05-25 2 views
0

У меня есть проект Flash Builder 4, подключенный к Flash Professional CS5 FLA. Я НЕ использую MXML, и весь код обрабатывается непосредственно в Flash Builder. (Сам Flash используется просто для библиотеки, и ее проще использовать для наших художников)Flash Builder 4 + Flash Professional + FlashVars! = РАБОТА

Все идет без сучка и задоринки, все исходит из динамически генерируемого XML с сайта, на который встроен SWF. Но до сих пор у меня был XML-путь, закодированный в ActionScript. Я просто не хочу этого делать.

Я следил за минимальными 45 учебными пособиями по поводу получения FlashVars в FB4/As3, и совсем просто ничего не работает. Старая школа < embed> метод, используя метод < object> и даже используя метод swfObject, просто я не могу получить доступ к этим свойствам flashvar.

вот HTML, что я в настоящее время есть сейчас:

<script> 
    var flashvars = { 
     xml: "/mapsystem/xml" 
    }; // yes that is definitely the correct path, its the same value as when it was hardcoded 
    $(function() { 
     swfobject.embedSWF("/flash/map.swf", "map", "960", "885", "10.0.0", "expressInstall.swf", flashvars); 
    }); 
</script> 
<div id="map"> 
    swfObject Aint Working 
</div> 

Heres в ActionScript (это в моем классе документа, первая вещь)

package 
{ 
import flash.display.LoaderInfo; 
import flash.display.MovieClip; 
import flash.display.Sprite; 
import flash.events.Event; 
import flash.text.TextField; 
import flash.text.TextFieldAutoSize; 

import src.GlobalStage; 
import src.Map; 
import src.Styles; 

public class map extends GlobalStage 
{ 
    public var xmlDoc = "map.xml"; 

    public function map() 
    { 
     var test:TextField = new TextField(); 
     test.x = 50; 
     test.y = 50; 
     test.autoSize = TextFieldAutoSize.LEFT; 
     test.text = "XML Doc: "; 
     this.addChild(test); 

     var test2:TextField = new TextField(); 
     test2.x = 50; 
     test2.y = 80; 
     test2.multiline = true; 
     test2.border = true; 
     test2.autoSize = TextFieldAutoSize.LEFT; 
     test2.text = "Parameters: \n"; 
     test2.appendText("Total Parameters: "); 

     this.addChild(test2); 

     var _params:Object; 

     if (this.loaderInfo.parameters.length != null) { 
      _params = this.loaderInfo.parameters; 
     } else { 
      // run alt code to init 
     } 

     for(var pItem:String in _params) { 

      test2.appendText("Name: " + pItem + " :: " + _params[pItem] + "\n"); 
     } 

        if(_params['xml'] != null) xmlDoc = _params['xml']; 


     test.appendText(xmlDoc); 

     var map:Map = new Map(xmlDoc); 

Теперь, когда я запускаю это на мой местный тест, ничего не отображается, как ожидалось, но когда дело доходит до того, что на самом сайте, с переданным flashvar, xmlDoc остается «map.xml», мой счетчик сообщает мне, что есть 0 параметров, и, конечно, ничего не появляется в мой список параметров.

Я потратил 8 часов, пытаясь заставить это работать, откровенно говоря, я теряю волосы и сплю над этим.

+0

Является ли GlobalStage вашим основным классом документов? Попробуйте использовать 'root.loaderInfo.parameters' вместо' this'. – weltraumpirat

ответ

1

loaderInfo.parameters является Object, и поэтому условие в этом if заявлении никогда, вероятно, чтобы быть правдой (если ваши Flashvars не имели параметров с именем «длина»):

if (this.loaderInfo.parameters.length != null) { 

Так вместо проверки, если длина не равно нулю, просто проверить, если параметры не равны нулю:

if (loaderInfo.parameters) { 
0

loaderInfo.parameters является объектом, и это никогда не бывает пустым. Что вы должны сделать, так это проверить существование вашего flashvar следующим образом:

if (loaderInfo.parameters.xml) 
{ 
    var xmlPath:String = loaderInfo.parameters.xml 
    // start using xml 
} 
else 
// run alt code to init 
} 
Смежные вопросы