2008-09-26 25 views
19

Có thể sử dụng Flex Framework và Components mà không sử dụng MXML không? Tôi biết ActionScript khá rõ ràng, và không cảm thấy như rối tung xung quanh với một số ngôn ngữ XML mới chỉ để có được một số giao diện người dùng đơn giản trong đó. Bất cứ ai có thể cung cấp một ví dụ bao gồm một tập tin .as có thể được biên dịch (lý tưởng thông qua FlashDevelop, mặc dù chỉ nói làm thế nào để làm điều đó với Flex SDK là ok quá) và sử dụng Flex Framework? Ví dụ, chỉ cần hiển thị một nút Flex bật mở một cảnh báo sẽ là hoàn hảo.Có thể sử dụng Flex Framework/Components mà không sử dụng MXML không?

Nếu không thể, ai đó có thể cung cấp tệp MXML tối thiểu sẽ khởi động lớp AS tùy chỉnh mà sau đó có quyền truy cập vào Flex SDK?

Trả lời

13

Tôi đã tạo một bootstrap đơn giản tương tự như Borek (xem bên dưới). Tôi rất thích loại bỏ các tập tin mxml, nhưng nếu tôi không có nó, tôi không nhận được bất kỳ chủ đề tiêu chuẩn mà đi kèm với Flex (haloclassic.swc, vv). Có ai biết làm thế nào để làm những gì Theo gợi ý và vẫn có các chủ đề tiêu chuẩn được áp dụng?

Dưới đây là phương pháp của tôi đơn giản bootstrapping:

main.mxml

<?xml version="1.0" encoding="utf-8"?> 
<custom:ApplicationClass xmlns:custom="components.*"/> 

ApplicationClass.as

package components { 
    import mx.core.Application; 
    import mx.events.FlexEvent; 
    import flash.events.MouseEvent; 
    import mx.controls.Alert; 
    import mx.controls.Button; 

    public class ApplicationClass extends Application { 
     public function ApplicationClass() { 
      addEventListener (FlexEvent.CREATION_COMPLETE, handleComplete); 
     } 
     private function handleComplete(event : FlexEvent) : void { 
      var button : Button = new Button(); 
      button.label = "My favorite button"; 
      button.styleName="halo" 
      button.addEventListener(MouseEvent.CLICK, handleClick); 
      addChild(button); 
     } 
     private function handleClick(e:MouseEvent):void { 
      Alert.show("You clicked on the button!", "Clickity"); 
     } 
    } 
} 

Sau đây là các cập nhật cần thiết để sử dụng nó với Flex 4:

chính.mxml

<?xml version="1.0" encoding="utf-8"?> 
<local:MyApplication xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:local="components.*" /> 

MyApplication.as

package components { 
    import flash.events.MouseEvent; 
    import mx.controls.Alert; 
    import mx.events.FlexEvent; 
    import spark.components.Application; 
    import spark.components.Button; 

    public class MyApplication extends Application { 
     public function MyApplication() { 
       addEventListener(FlexEvent.CREATION_COMPLETE, creationHandler); 
     } 
     private function creationHandler(e:FlexEvent):void { 
      var button : Button = new Button(); 
      button.label = "My favorite button"; 
      button.styleName="halo" 
      button.addEventListener(MouseEvent.CLICK, handleClick); 
      addElement(button); 
     } 
     private function handleClick(e:MouseEvent):void { 
      Alert.show("You clicked it!", "Clickity!"); 
     } 
    } 
} 
+0

Tuyệt, điều này có vẻ như tối thiểu như bạn có thể nhận được, mxml-wise. Chấp nhận câu trả lời của bạn vì nó gần như là mã AS thuần túy. – davr

+0

Đẹp, cảm ơn. Sử dụng FlashDevelop bạn thậm chí có mã hoàn thành phong phú về các đối tượng như "nút". Tốt đẹp. Điều này không hiệu quả trong ví dụ của Borek. –

+1

Đã cập nhật để bao gồm ví dụ về mã cần thiết cho Flex 4. – davr

0

Có, bạn chỉ cần bao gồm đường cong flex trong đường dẫn lớp của bạn. Bạn có thể tìm flex.swc trong thẻ flex sdk trong frameoworks/lib/flex.swc

chỉnh sửa: Một điều nữa: nếu bạn đang sử dụng Flex Builder, bạn có thể tạo một dự án ActionScript mới. như trên.

+0

Nó không hoàn toàn công việc. Bạn nhận được các lỗi khác nhau khi bạn thực sự cố gắng sử dụng các thành phần Flex như Nút hoặc DataGrid vv – davr

9

Đây là một ứng dụng rất đơn giản chỉ thực hiện khởi động cơ bản trong MXML. Đây là MXML:

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="onCreationComplete()"> 
    <mx:Script source="Script.as" /> 
</mx:Application> 

Đây là Script.as:

import mx.controls.Button; 
import flash.events.MouseEvent; 
import mx.controls.Alert; 
import mx.core.Application; 

private function onCreationComplete() : void { 
    var button : Button = new Button(); 
    button.label = "Click me"; 
    button.addEventListener(MouseEvent.CLICK, function(e : MouseEvent) : void { 
    Alert.show("Clicked"); 
    }); 

    Application.application.addChild(button); 
} 
+0

Điều này thật tuyệt nhưng không may trong FlashDevelop không có hoàn thành mã trên ví dụ: "nút". Bất kỳ cách nào để kích hoạt tính năng đó? –

7

LƯU Ý: Câu trả lời dưới đây sẽ không thực sự làm việc, trừ khi bạn khởi tạo thư viện Flex đầu tiên. Có rất nhiều mã liên quan đến việc đó. Xem nhận xét bên dưới hoặc các câu trả lời khác để biết thêm chi tiết.


Các lớp học chính thậm chí không phải là trong MXML, chỉ cần tạo một lớp kế thừa từ mx.core.Application (đó là những gì một lớp MXML với một nút <mx:Application> gốc được biên dịch như anyway):

package { 

    import mx.core.Application; 


    public class MyFancyApplication extends Application { 

    // do whatever you want here 

    } 

} 

Ngoài ra, bất kỳ mã ActionScript nào được biên dịch với trình biên dịch mxmlc - hoặc thậm chí công cụ soạn thảo Flash CS3 - có thể sử dụng các lớp Flex, nó chỉ là vấn đề làm cho chúng có sẵn trong classpath (tham khảo SWC khung khi sử dụng mxmlc hoặc trỏ đến một thư mục chứa nguồn khi sử dụng một trong hai). Trừ khi lớp tài liệu kế thừa từ mx.core.Application, bạn có thể gặp một số sự cố, vì một số thứ trong khung làm việc giả định rằng đây là trường hợp.

+0

Hmm ... Tôi đã thực sự thử điều này, và một "Hello World" đơn giản nhận được rất nhiều lỗi thời gian chạy. Có loại khởi tạo nào tôi cần làm hay các lớp cụ thể khác mà tôi cần đưa vào không? – davr

+0

Rất dễ dàng để tìm hiểu, chỉ cần thêm -keep-generated-actionscript vào các cờ biên dịch và biên dịch một lớp MXML kế thừa từ Ứng dụng. Trình biên dịch tạo ra một thư mục có tên là "được tạo ra", nơi bạn có thể tìm thấy mã ActionScript được tạo ra. Đó là một chút phức tạp hơn so với ở trên, đúng sự thật. – Theo

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