Powiedzmy, że muszę skompilować dwie różne wersje mojego pliku .swf dla różnych witryn. Różnica polega na nazwach hostów dla ajax i przekierowaniu, kilku drobnych poprawkach w kodzie i grafice dodanej do projektu w .swc. Mogę łatwo przełączać różne swc, ale poprawki kodu są trudne do łatwego zarządzania. Mam

CONFIG::site1 
{
    private var _domainName:String = "site1.com";
}

CONFIG::site2
{
    private var _domainName:String = "site2.com";
}

FB wyświetla błąd: 1151: istnieje konflikt z definicją _domainName w wewnętrznej przestrzeni nazw.
To, czego potrzebuję, to coś takiego w C:

#ifdef SITE1
char hostname[] = "site1";
#endif

#ifdef SITE2
char hostname[] = "site2";
#endif

Czy istnieje sposób na użycie dyrektyw kompilacji w ten sposób przy użyciu mxmlc?

PS Teraz wszystko działa

0
Nanako 18 sierpień 2011, 16:56
2
Powinno działać, jeśli nie oba są równe true: -define+=CONFIG::site1,true -define+=CONFIG::site2,false
 – 
average dev
18 sierpień 2011, 17:15
Zamknąłem i ponownie otworzyłem FB i zaczęło działać! Niemniej jednak bardzo dziękuję!
 – 
Nanako
18 sierpień 2011, 17:26

3 odpowiedzi

Najlepsza odpowiedź

Myślę, że ta dokumentacja pomoże.

W twoim przypadku jest to mniej więcej tak:

private var _domainName:String = NAMES::site;

A argumenty mxmlc będą wyglądać tak:

-define+=NAMES::site,"'site1.com'"
3
Constantiner 18 sierpień 2011, 17:05
To właśnie przeczytałem przed opublikowaniem tutaj. w podobny sposób, w jaki można użyć polecenia preprocesora #IFDEF w C lub C++. Nie można używać stałych wartości logicznych do warunkowania metadanych lub instrukcji importu. Nic o deklaracji zmiennej.
 – 
Nanako
18 sierpień 2011, 17:07
Wygląda ładnie, dzięki, ale co z kompilacją warunkową? Wygląda na to, że mxmlc traktuje bloki CONFIG jak kod ogólny, a nie oddzielnie. Czy jest jakiś znany sposób, aby to ominąć?
 – 
Nanako
18 sierpień 2011, 17:15
Dokumentacja nosi tytuł "Korzystanie z kompilacji warunkowej" :) A pierwszy fragment kodu w dokumentacji zawiera próbkę tego :)
 – 
Constantiner
18 sierpień 2011, 17:21
Powinieneś zdefiniować oba parametry, jak powiedział Paweł w komentarzach do pytania.
 – 
Constantiner
18 sierpień 2011, 17:22
Tak, ale kompilator dzieli przestrzeń nazw między blokami kodu, chociaż zdecydowanie nie powinien. To mój problem. :(
 – 
Nanako
18 sierpień 2011, 17:24

Możesz to zrobić:

private var _domainName:String = CONFIG::site1 ? "site1.com" : "site2.com";

Jeśli chcesz wiedzieć, co jest możliwe ze stałymi konfiguracyjnymi, zajrzyj na tę stronę :
http://wiki.ecmascript.org/doku.php?id=proposals:program_configuration
Do tej pory odkryłem, że kompilator obsługuje wszystko, o czym mowa na tej stronie.

0
cmann 18 sierpień 2011, 19:00

Po co w ogóle kodować domeny? Nie dyrektywa ani konkretnie odpowiedź na twoje pytanie, po prostu mówię lol

private var _domainName:String;

var lc:LocalConnection = new Local
this._domainName= lc.domain;
0
The_asMan 19 sierpień 2011, 04:30