2008-10-15 23 views
6

Tôi biết rằng bạn có thể áp dụng CSS để đối tượng phong cách trong Flex sử dụng StyleManager:
http://livedocs.adobe.com/flex/3/html/help.html?content=styles_07.htmlLàm cách nào để bạn tải động tệp CSS vào ứng dụng Flex?

Bạn cũng có thể tải biên soạn file CSS (SWF) tự động:
http://livedocs.adobe.com/flex/3/html/help.html?content=styles_10.html

Tuy nhiên, Tôi đang tự động tạo các tệp CSS của mình bằng cách sử dụng GUI web và tập lệnh phía máy chủ. Nếu CSS bị thay đổi, thì tập lệnh cũng sẽ cần phải biên dịch CSS thành SWF (không phải là tùy chọn khả thi). Có cách nào để khắc phục điều này?

Trả lời

0

Ứng dụng CSS trong Flex được xử lý ở phía máy chủ khi biên dịch chứ không phải ở phía máy khách trong thời gian chạy.

tôi sẽ thấy hai tùy chọn sau đó cho bạn (Tôi không chắc chắn cách thực tế hoặc là):

  1. Sử dụng một máy chủ side script để biên dịch CSS của bạn như một SWF sau đó tải chúng tự động.
  2. Phân tích một trang Kiểu CSS và sử dụng các hàm setStyle trong flex để áp dụng các kiểu. Một ví dụ tương tự cho cách tiếp cận này là Flex Style Explorer nơi bạn có thể xem source.

Chúc may mắn.

3

Trong this comment đến một vấn đề liên quan đến điều này trong các lỗi tracker Adobe T. Busser được mô tả những gì có thể là một giải pháp khả thi cho bạn:

"Tôi đã tạo một lớp nhỏ mà sẽ 'phân tích' một file CSS đọc với một HTTPService đối tượng. Phải mất ngoài các chuỗi được trả về bởi các đối tượng HTTPService, phá vỡ nó xuống selectors, và tạo ra một đối tượng CSSStyleDeclaration mới cho mỗi selector được tìm thấy. Khi tất cả t anh ta thuộc tính được gán cho đối tượng CSSStyleDeclaration nó được thêm vào StyleManager. Nó không thực hiện bất kỳ séc nào, bạn nên thực hiện đảm bảo tệp CSS được tạo đúng, nhưng nó sẽ đủ 99% thời gian. Các nội dung như @font, Embed() và ClassReference() sẽ khó được sử dụng bởi khách hàng của tôi. Họ làm cần khả năng thay đổi màu sắc và các công cụ như thế để họ có thể dễ dàng chủ đề Flex ứng dụng phong cách nhà của họ ".

Bạn có thể hoặc là cố gắng liên lạc với người này cho giải pháp của họ hoặc cách khác .. có lẽ sử dụng mã từ this as3csslib project làm cơ sở cho việc viết một cái gì đó giống như những gì họ đang mô tả

2

Bạn cũng có thể thực hiện kiểu động trong flex như thế này đây tôi tìm thấy bài viết này: http://askmeflash.com/article_m.php?p=article&id=6

+1

này đã làm việc tốt cho tôi - thay vì sử dụng parseCSS tôi đã kết thúc phân tích các chuỗi bản thân mình và thiết lập mỗi tài sản sử dụng: StyleManager.getStyleDeclaration ("Thành phần"). setStyle ("thuộc tính", giá trị); Loại hack nhưng cũng oh ... – onekidney

2

Chỉnh sửa: Giải pháp này không hoạt động.Tất cả các bộ chọn được lấy ra khỏi trình phân tích cú pháp được chuyển thành chữ thường. Điều này có thể làm việc cho ứng dụng của bạn nhưng có thể sẽ không ...

Tôi để lại câu trả lời ở đây vì nó có thể giúp một số người tìm kiếm giải pháp và cảnh báo những hạn chế của phương pháp này.


Xem câu hỏi của tôi: "Looking for CSS parser written in AS3" cho một thảo luận đầy đủ nhưng tôi tìm thấy một phân tích cú pháp CSS ẩn bên trong các thư viện chuẩn. Đây là cách bạn có thể sử dụng nó:

public function extractFromStyleSheet(css:String):void { 

    // Create a StyleSheet Object 
    var styleSheet:StyleSheet = new StyleSheet(); 
    styleSheet.parseCSS(css); 

    // Iterate through the selector objects 
    var selectorNames:Array = styleSheet.styleNames; 
    for(var i:int=0; i<selectorNames.length; i++){ 

     // Do something with each selector 
     trace("Selector: "+selelectorNames[i]; 

     var properties:Object = styleSheet.getStyle(selectorNames[i]); 
     for (var property:String in properties){ 

      // Do something with each property in the selector 
      trace("\t"+property+" -> "+properties[property]+"\n"); 
     } 
    } 
} 

Sau đó bạn có thể áp dụng các phong cách sử dụng:

cssStyle = new CSSStyleDeclaration(); 
cssStyle.setStyle("color", "<valid color>); 
FlexGlobals.topLevelApplication.styleManager.setStyleDeclaration("Button", cssStyle, true); 
+0

Tại sao bạn đăng bài ở câu hỏi được trả lời có độ tuổi trên 2 năm? –

+1

@Rob Tôi đã tìm thấy câu hỏi này bằng cách tìm kiếm trong Google và nghĩ rằng câu trả lời chưa hoàn chỉnh. Câu trả lời của tôi hoàn thành câu hỏi và sẽ hữu ích cho những người tìm câu hỏi (như tôi đã làm) từ Google. – sixtyfootersdude

Các vấn đề liên quan