2010-02-20 21 views
5

Tôi đang cố gắng sử dụng Flex Compile Time Constants để bao gồm ngày và giờ SWF được tạo (sửa đổi kiểm soát nguồn/dấu thời gian như SVN: Từ khóa không đủ cho nhu cầu của chúng tôi, chúng tôi cần biết thực tế thời gian xây dựng, không phải thời gian cam kết).Hằng số thời gian biên dịch Flex - Dấu thời gian

Tôi đã cố gắng sử dụng ActionScript (như tài liệu cho thấy bạn sẽ có thể):

-define+=COMPILE::Timestamp,"new Date()" 

Nhưng điều này mang lại cho "The initializer cho một giá trị cấu hình phải là một thời gian biên dịch liên tục"

Tôi đã thử tải xuống trình bao và sử dụng lệnh ngày (sử dụng nhiều cấu hình báo giá đơn và kép), ví dụ:

-define+=COMPILE::Timestamp,`date +%Y%m%d%H%M%S` 

Tôi chỉ có thể g và nó hoạt động với các chuỗi đơn giản và các biểu thức hằng số đơn giản (ví dụ, tôi có thể làm 4-2 và nó sẽ là 2 khi chạy. Nhưng tôi không thể làm cho nó để làm bất cứ điều gì có giá trị sẽ không được biết rõ tại thời điểm tôi tuyên bố xác định.

Có ai có may mắn với thứ như thế này không?

Trả lời

3

tôi đã cùng một vấn đề và kết thúc using this blog post như là một điểm khởi đầu. Làm việc rất tốt cho tôi. Chỉ cần phải cập nhật một vài bit của lớp học để flex 4. Kéo ngày phải ra khỏi swf tuân thủ.

+1

Liên kết mà bạn cung cấp đã dẫn tôi đến blog này bài đăng: http: //www.i gorcosta.org/?p=220. Điều này chưng cất nó hơn nữa và không giới thiệu bất kỳ phụ thuộc thư viện bổ sung nào. Nó cho phép bạn truy cập vào thời gian biên dịch từ thời gian chạy của bạn (không sử dụng định nghĩa, nhưng đọc nó từ một lớp trống thông qua 'LoaderInfo.getLoaderInfoByDefinition (emptyClass) .bytes' và phân tích cú pháp này bằng cách sử dụng dấu ngắt) – MightyE

+0

Brilliant. Cảm ơn MightyE. – mrjrdnthms

0

Chìa khóa cho vấn đề của bạn rất có thể là trong tuyên bố sau bởi Adobe đề cập đến thời gian biên dịch Constants: Hằng số có thể là một Boolean, String, hoặc Number, hay một biểu thức có thể được đánh giá trong ActionScript tại thời gian biên dịch .

Tôi cho rằng Dấu thời gian không khả dụng tại thời gian biên dịch.

Tuy nhiên, bạn có thể thử sử dụng một chuỗi thay vì (một cái gì đó như thế này)

public function GetUnixTime():String{ 
var myDate:Date = new Date(); 
var unixTime:Number = Math.round(myDate.getTime()/1000); 
return unixTime.toString(); 
} 

suy nghĩ khác là bạn có thể nhận được thông tin từ các tập tin biên soạn.

Hy vọng điều này sẽ hữu ích.

+0

"hoặc một biểu thức có thể được đánh giá trong ActionScript tại thời gian biên dịch" là điều đã cho tôi hy vọng, nhưng ngay cả trường hợp đơn giản nhất tôi có thể quan sát ('-define + = COMPILE :: Dấu thời gian," new Date() "') không hoạt động (cũng không phải 'new Date(). toString()'). Tôi đã thử tạo một phương thức giống như phương thức của bạn, nhưng nó cho cùng một lỗi như đã nêu ở trên, "Trình khởi tạo cho một giá trị cấu hình phải là một hằng số thời gian biên dịch." – MightyE

+0

Ồ, cũng vậy, dấu thời gian trên đĩa đánh bại những gì tôi đang cố gắng hoàn thành, đó là có ứng dụng Flex" chỉ biết "ngày/giờ nó được xây dựng (tôi hơi ngạc nhiên khi không có tiền tố) Để sử dụng dấu thời gian, chúng ta cần một cái gì đó phía máy chủ để đọc dấu thời gian và báo cáo lại nó. Điều này làm cho nó phụ thuộc vào thời gian và múi giờ của máy chủ mà nó đang chạy, một số máy chủ cụ thể- phần mềm phụ, và đặc biệt là trong các tình huống lỗi (một phần của những gì chúng ta muốn làm là bao gồm thời gian xây dựng trong các báo cáo lỗi), điều này có thể thất bại trên chúng tôi – MightyE

+0

FWIW, một nền tảng nhỏ: Đây là một thư viện sẽ được nhúng trong các ứng dụng khác. Chúng tôi không nhất thiết có thể đảm bảo rằng nó sẽ chạy một thời gian chạy phía máy chủ cụ thể, thậm chí không nhất thiết phải chạy trên trang web, ứng dụng Air, ứng dụng dành cho máy tính để bàn, tiện ích con, v.v. – MightyE

0

Sau khi nghiên cứu sâu rộng, tôi đã kết luận rằng điều này đơn giản là không thể thực hiện được.

0

Nếu bạn không sử dụng FlexBuilder để thực hiện các bản dựng, bạn có thể làm điều đó khá dễ dàng.

Tôi làm điều gì đó như thế này với FlexMojos trong Maven.

Trong phần cấu hình có liên quan:

   <definesDeclaration> 
        <property><name>BUILD::buildVersion</name><value>"${project.version}"</value></property> 
        <property><name>BUILD::buildRevision</name><value>"${buildNumber}"</value></property> 
       <property><name>BUILD::buildTimestamp</name><value>"${timestamp}"</value></property> 
       </definesDeclaration> 

FlexBuilder khá nhiều hút như một môi trường xây dựng vì những lý do như một trong những bạn đề cập đến