Tài liệu môn Flashcs4 Professional

Thuộc tính fromState=”*” và toState=”*” báo hiệu rằng khi chuyển bất kì từ state nào sang state nào thì đều chạy một effect là “changeTheState”. ChangeTheState là id của một Parallel, trong Parallel chứa 2 effect là Move và Resize. Cung cấp cho 2 effect này targets, targets ở đây là mảng các đối tượng chị sự tác động của 2 effect này. Trong trường hợp này là panel1 và panel2. Lưu ý là panel1 và panel2 là 2 id của đối tượng Panel. 2 Effect này đặt trong thẻ có nghĩa là chúng cùng chạy song song với nhau, Move và Resize cùng chạy động thời. Ngoài thẻ còn có thẻ , nghĩa là chạy tuần tự từng effect một

pdf150 trang | Chia sẻ: nguyenlam99 | Lượt xem: 950 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Tài liệu môn Flashcs4 Professional, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
n đã click vào hình vuông thứ " + (e.index).toString(); Hàm này sẽ đưa dòng chữ “bạn đã click vào hình vuông thứ i” với i = (e.index).toString(); ở đây e là biến thuộc kiểu NewEvent, nó chính là đối tượng đã được phát ra từ hàm dispatchEvent() trong class Rect. Dễ thấy, mỗi lần bạn click vào một hình vuông, một sự kiện NewEvent được phát ra, khi đó text field sẽ hiển thị index của đối tượng được click. Dưới đây là những gì bạn sẽ thấy: FlashCS4 Professional 83 Tôi đã click vào hình vuông thứ 3 và dòng chữ “Bạn đã click vào hình vuông thứ 3” xuất hiện. Vậy là, tuy thuộc tính index của mỗi đối tượng thuộc kiểu Rect là private, nhưng chúng ta vẫn có thể lấy được nó từ class Main. Tới đây, bạn có lẽ sẽ thấy, ví dụ này chưa đáp ứng được những gì nêu ra trong mục 3.3, vậy thì hãy thử thay đổi một số thứ coi. Đầu tiên thay dòng Rect(arr[i]).addEventListener(NewEvent.NEW_EVENT, displayIndex); Bằng: if(i<arr.length-1) Rect(arr[i]).addEventListener(NewEvent.NEW_EVENT, displayIndex); Có nghĩa là hinh vuông thứ 10 không lắng nghe sự kiện như các hình khác. Nhưng bản than nó vẫn tự nghe sự kiện click và phát ra sự kiện NewEvent.NEW_EVENT. Vấn đề là không hề có dòng chữ nào hiện ra cả. Câu hỏi đặt ra: tại sao tất cả 9 đối tượng còn lại đều lắng nghe NewEvent.NEW_EVENT, đối tượng thứ 10 phát ra sự kiện này nhưng không tự nghe, tại sao các đối tượng khác không nghe và hiển thị thông tin index của đối tượng số 10 kia. Câu trả lời đúng như những gì mục 3.3.1 và 3.3.2 nêu ra. Tiếp nữa, giả sử mỗi đối tượng Rect không chỉ phải nghe sự kiện click mà còn phải nghe một vài sự kiện khác. Rõ rang rằng nếu xử lý điều đó ở hàm Main thì sẽ rất tốn công. Thay vì thế ta xử lý việc kiểm tra các sự kiện khác đã xảy ra chưa, nếu rồi thì phát ra Event để hàm Main nhận và xử lý. Điều này giải quyết những gì mà mục 3.3.3 và 3.3.5 đưa ra. Việc removeEventListener không được nêu ra ví dụ trong trường hợp này, tuy thế đây là một chú ý không kém phần quan trọng. Các bạn hãy tham khảo bài 1 chương 4 về code trên timeline, trong đó có sử dụng tới hàm đó, hãy đọc kĩ và thử thay đổi để không sử dụng lệnh đó nữa, bạn sẽ thấy một số bất ổn. Trước khi kết thúc, cảm ơn vì bạn đã theo dõi tới đây. FlashCS4 Professional 84 Chương 4: GIỚI THIỆU VỀ FLEX FRAMEWORK Giới Thiệu: Đúng như tên gọi Flex là một Framework (khung lập trình) hỗ trợ lập trình viên viết các ứng dụng dựa trên SWF (SWF-Based Application), các ứng dụng này chạy trên Flash Player từ phiên bản 9 trở lên, hiện tại phiên bản mới nhất là phiên bản 10. Cũng như .NET Framework và Java, Flex Framework tích hợp sẵn các Component (như Button, Panel, Container, List, Link Button, Box,..) để viết ứng dụng. Các ứng dụng mới này có tên là RIA (Rich Internet Applicaton) , là xu thế mới nhất về viết ứng dụng hay viết phần mềm, trong khuôn khổ bài viết tôi sẽ chỉ nói sơ qua RIA là gì. Một các dễ hiểu , RIA là các ứng dụng chạy trên Internet nhưng lại mang đầy đủ sức mạnh của các ứng dụng chạy trên Desktop truyền thống. Đó có thể là các ứng dụng soạn thảo văn bản , tạo slide , chỉnh sửa và chia sẻ ảnh trực tuyến. Các ứng dụng này có 2 trạng thái làm việc, một là offline và online. Nói đến đây có thể các bạn có thể còn khá mơ hồ về RIA, hãy bắt đầu bằng việc truy cập vào trang Acobat.com hay PhotoshopExpress.com , SlideRocket.com thử dùng các ứng dụng này để có được hình dung về RIA. Sau đó hãy cùng tôi tìm hiểu về Flex để học cách viết các ứng dụng RIA. Ý tưởng về sự ra đời của Flex là do, mối trường của Flash hỗ trợ rất kém cho việc code, khiến các Developer những người không có kiến thức về Design gặp rất nhiều khó khắn trong việc viết ứng dụng cũng như tạo các Animation Script trên nền Flash (Flash Platform).Với nhược điểm này của Flash, Adobe đã tung ra Adobe Flex, với mục đích hỗ trợ tốt hơn cho các Developer, giúp họ viết được các ứng dụng một cách nhanh nhất , tạo các Animation hoàn toàn bằng code. Đồng thời với phiên bản mới nhất hiện sẽ phát hành vào cuối năm 2009 , Adobe Flex 4 (tên mã là Gumbo) hứa hẹn sẽ tạo ra một môi trường phát triển ứng dụng hoàn hỏa cho cả Designer và Developer. Bạn hãy hình dung một bối cảnh như sau, các Designer sẽ thiêt kế bằng Adobe Photoshop hay iLLustrator hay FireWork hay Flash, tất cả các nét vẽ của họ sẽ được giữ nguyên khi bạn import vào Adobe Flex 4.Và nhiệm vụ của chúng ta, những người Developer sẽ tạo các chức năng, xủ lý , kết nối dữ liệu, hiệu ứng, và hiện thực hóa ý tưởng của các Designer trong ứng dụng . Trong chương này chúng ta sẽ học được các cách sau: Cài đặt Flex Builder 3 for Window, MAC. 1. Làm quen mới giao diện sử dụng của Flex Builder. 2. Sử dụng MXML + AS3 cơ bản trong Flex Builder 3. 3. Những đặc điểm đáng chú ý của MXML. 4. Làm quen với các Component cơ bản của Flex Framework. FlashCS4 Professional 85 Bài 1: CÀI ĐẶT FLEX BUILDER 3 Nếu một trong số các bạn từng viết Java, lúc bắt đầu họ sẽ dậy cách chạy các doạn code java bằng lệnh trong Command Promp (Start->Run, gõ “cmd” rồ Enter). Để soạn code java bạn có thể dùng Notepad (Start->Run, gõ “Notepad”, Enter) để soạn thảo.Muốn dịch một file java bạn phải gõ lệnh, giả sử tôi có một file tên là Hello.java trog thư mục D:/Java, muốn dịch file này để chạy tôi gõ lệnh C:/javac D:/Java/Hello.java . Bộ Java SDK (Software Development Kit) sẽ tự động dịch file này, tuy nhiên nếu chương trình bạn có lỗi, sẽ rất khó có thể tìm ra lỗi (debug) của đoạn code đó ở đâu. May mắn thay, nhờ có các trình soạn thỏa và biện dịch (IDE – Intergrated Development Environment) hiện đại, sẽ giúp ta soạn thảo, dịch cũng như sửa lỗi chương trình dễ dàng và thuận tiện hơn rất nhiều. Tương tự Flex cũng vậy, bạn có thể dùng Notepad để soạn thảo và dùng lệnh trong Command Promp để dịch, hoặc dùng Flex Builder 3 là một IDE giúp bạn soạn code nhanh chóng và dễ dàng. Adobe Flex Builder 3 viết trên nền Eclipse IDE là một IDE mã mở viết bằng Java, Adobe đã thương mại hóa Flex Builder 3, nó có 2 phiên bản là Stand Alone (chạy độc lập) và Plug-in cho Eclipse. Bạn dùng bản nào cũng được , tuy nhiên các ví dụ sẽ được dùng bằng Flex Builder 3. Flex Builder là bản thương mại nhưng nếu các bạn là sinh viên thì có thể đắng ký với Adobe để nhận được key giành cho sinh viên, hoàn toàn miễn phí.(cung cấp link). Với ý kiến cá nhân tôi khuyên bạn nên dùng Flex Builder 3 trước, sau đó dùng Plug-in cho Eclipse sau. Một tin mừng nữa là Flex SDK đã và đang hướng tới Open-Source (mã nguồn mở) , điều này rất có ích vì các bạn có thể kiếm được các đoạn code quý và hay, giúp nâng cao khả năng code của mình.Các bạn có thể vào trang opensource.adobe.com hoặc labs.adobe.com để tìm những dự án mã mở mới nhất do Adobe cung cấp. Để tìm các ví dụ (sample) về Flex bạn có thể vào trang Adobe.com/devnet/flex chọn tab Sample, các samples này đều cung cấp code cho bạn. Để chạy được nó các bạn phải cài Flash Player mà chút nữa tôi sẽ hướng dấn bạn cài đặt. Để lấy được code của các ví dụ, khi đang chạy bạn ấn chuột phải rồi chọn “ViewSource”. Mục tiêu bài học: 1. Giới thiệu Flex Builder 3. 2. Cài đặt Flex Builder 3 FlashCS4 Professional 86 Nào, trước tiên hãy download Flex Builder 3. Đầu tiên bạn vào trang , Chọn hệ điều hành mà bạn sử dụng. Bản thương mại hiện tại chỉ có cho Window và MAC. Nếu bạn dùng Linux thì vào đây để down . FlashCS4 Professional 87 Bản cho Linux là bản free nên nó bị lược bỏ một số tính năng như ko hỗ trợ màn hình design giao diện, và bản này là bản Plug-in nên bạn phải down Elipse-IDE ( bắt buộc phải là phiên bản Elipse 3.3.x) . Bài hướng dẫn tri tiết cài Flex trong Linux sẽ ở cuối tài liệu. Sau khi download Flex Builder 3 về, bạn cài đặt như bình thường FlashCS4 Professional 88 Chọn OK Next FlashCS4 Professional 89 Accept the terms,rồi ấn Next Chọn đường dẫn rồi ấn Next FlashCS4 Professional 90 Chọn hết các lựa chọn rồi ấn Next Ấn install để bắt đầu cài đặt. Khi bạn khởi động lần đầu tiên , Flex Builder sẽ họi bạn chọn Workspace (không gian làm vc) để nó hoạt động, bạn có thể nhấn OK luôn để chọn mặc định, hoặc chọn bất ký một Folder trong máy của bạn để làm Workspace rồi nhấn OK. FlashCS4 Professional 91 Và đây là màn hình của Flex Builder 3 khi bạn chạy lần đầu tiên. Tips : Mặc định Flash Player mà Flex Builder 3 cài là phiên bản 9.x.x, và chưa cài Flash Player Debug Version, bản phải vào trang chủ Adobe.com để down bản Flash Player mới nhất (bản 10.x.x). Down về rồi cài như bình thường. FlashCS4 Professional 92 Rồi vào đây download bản Debug (giúp phát hiện lỗi khi chạy chương trình). Download bản dành cho IE (Internet Explorer) và Firefox ( hoặc Netscape). Download về cài đăt như bình thường. Chú ý là bản Flash Player 10 - Debugger Version. FlashCS4 Professional 93 Bài 2: SỬ DỤNG FLEX BUILDER 3 I.Làm quen với giao diện của Flex Builder 3 1.Source View Trên cùng là các menu điều khiển. Khung được tô màu đỏ là khung chứa cấu trúc các Folder trong Project của bạn. Khung tô màu xanh là khung Outline, tức là nó sẽ tóm tắt cho bạn biết đoạn code bạn đang viết có những Component nào, điều này rất có lợi khi bạn đọc code của ai đó mà muốn có cái nhìn tổng quan về code của họ. Mục tiêu bài học: 1. Thiết kế giao diện trong Flex Builder 3. 2. Sử dụng Flex Builder 3 để viết code. FlashCS4 Professional 94 Khung tô mầu hồng là màn hình Editor để bạn soạn code , để ý một chút khi nhìn lên trên cùng bên trái của màn hình Editor bạn thấy nó 2 chế độ là Source và Design. Khi bạn viết code thì bạn chuyển sang chế độ code, khi muốn Design giao diện thì bạn chuyển sang màn hình Design.-Khung da cam trên cùng là nơi bạn chọn các chế độ làm việc của Flex Builder 3, có 3 chế độ làm việc cho bạn khi phát triển ứng dụng. +Flex Development : Chế độ mặc định của Flex Builder, là chế độ để bạn viết code, design giao diện, hiệu ứng. +Flex Debugging : Chế độ Debug( dò lỗi) , viết xong nếu chạy thấy có lỗi, bạn sẽ được hỏi có muốn chuyển sang chế độ Debug hay không, đề tìm lỗi của ứng dụng. Đế khởi động chế độ này bạn chọn Run → Debug. +Flex Profiling : Chế độ quản lý bộ nhớ của ứng dụng, khi ở trong chế độ này bạn sẽ biết ứng dụng mà mình biết dùng hết bao nhiêu bộ nhớ của máy tính.Đế khởi động chế độ này bạn chọn Run → Profile 2.Design View -Khi bạn nhấn vòa tab Design trong màn hình Editor, Flex Builder sẽ chuyện sang chế độ Design, là nơi bạn kéo thả các Componet như Button, Panel, Text Area,.. vòa ứng dụng của mình để sử dụng, khi kéo thả thì Flex Builder sẽ tự sinh code thêm các component đó khi bạn chuyển lại sang cế đó Source View. FlashCS4 Professional 95 Khung mầu hồng là cửa sổ chứa các Component mà Flex Builder hỗ trợ. Khung mầu xanh lá là màn hình Design chính. Khung mầu xanh đậm là khung chứa các thuộc tính (Properties) của Component mà bạn vừa kéo thả vào.Các thuộc tính này có thể là Tên, ID,kích thước, tạo độ,.. Khung mầu hồng là cửa sổ State, cho phép bạn Design các trạng thái (state) của ứng dụng, phần sử dụng state sẽ được nói rõ ở các bài sau. 3.Viết chương trình Hello World. Việc đầu tiên khi bạn viết một ứng dụng bằng Flex Builder hay bất cứ trình soạn thảo hiện đại nào là tạo một Project mới. Vào File → New → Flex Project. Trong ô Project nam đặt tên cho Project của bạn, tôi đặt tên là HelloWorld. Trong phần Project Location, bạn chọn nơi để Project của bạn, bạn có thể chọn mặc định theo Flex Builder hoặc là link đến bất kỳ một Folder nào trong máy bạn, ví dụ D:/Flex Working/ HelloWorld. Trong phần Application Type chọn Web Application (runs in Flash Player), phần Desktop Application sẽ nói ở các bài sau. FlashCS4 Professional 96 Trong phần Application server type chọn “none”, rồi Click Next. Output Folder là nơi các file được Flex Builder dịch từ code của bạn ra sẽ được đưa vào đây, tuy nhiên các file này vẫn chứa các thông tin để Flex Builder debug nó chưa phải là file chạy hoàn toàn. Mặc định được đưa đến thư mục bin-debug, bạn sẽ thấy thư mục này trong Project của bạn. Click Next. FlashCS4 Professional 97 Trong ô Main Application File, tức là file chính của ứng dụng của bạn, file này sẽ được dịch đầu tiên khi Flex Builder bắt đầu dịch ứng dụng mà bạn viết. Bạn có thể đổi tên thành Main.mxml hoặc để mặc định theo Project. Trương hợp của tôi tôi sẽ đổi lại thành Main.mxml. Click Finish để hoàn tất. Sau khi Finish , màn hình của Flex Builder sẽ hiện thị như sau: Nhìn vào cấu trúc các Folder trong Project của bạn bạn có thể thấy, thư mục bin-debug đã được tự động thêm vòa, và file chính Main.mxml trong Folder src mà nãy tôi đã đổi tên từ HelloWorld.mxml thành Main.mxml. Mặc định Flex đang ở chế độ Source View , ở bên phải là màn hình soạn thảo code, bạn nhập đoạn code sau vào. Bạn chưa cần phải hiểu cấu trúc code như nào, tôi sẽ nói với bạn ngay trong bài sau thôi. <mx:Application xmlns:mx="" layout="absolute"> Ấn Ctrl+S đế save lại rồi vào Run → Run Main để chạy ứng dụng. Hoặc nhấn nút FlashCS4 Professional 98 FlashCS4 Professional 99 Bài 2: MXML và Action Script 3.0 trong Flex Builder 3 I.Vai Trò của MXML và ActionScript 3.0 Hai thành phần cơ bản của Flex Framework là MXML (Magic eXtensible Markup Language , chữ M cũng có thể là Macromedia hoặc Maximum) và ActionScript 3.0 . MXML được giới thiệu lần đầu tiên do công ty Macromedia mà nay là Adobe vào tháng 3 năm 2002. MXML là một ngôn ngữ dựa trên cú pháp của XML (XML-Based Vocabulary) , nó cho phép các Developers có thể trình bày được giao diện người dùng (GUI – Graphic User Interface) một cách dế dàng, đồng thời cũng cho phép các Designer những người không có kiến thức về lập trình cũng có thể hiểu được các giao diện này. MXML gồm các thẻ (Tags) hay các thành phần (elements) tương ứng với ActionScript 3.0 Class. Các Tags này sẽ được dịch thành mã ActionScript khi mà một file SWF được tạo. Các thuộc tính (attributes) trong Tags tương ứng với các thuộc tính (properties) và các phương thức (methods) của ActionScript Class. MXML diễn tả mọi thứ trong chương trình của bạn, từ các thành phần của GUI (Graphic User Interface) , đến các Visual Layout (như Panel, Vertical-Box, Horizontal-Box), Effect (hiệu ứng), Data Connection (kết nối dữ liệu). Người lập trình có thể đưa các thành phần này lên ứng dụng của mình bằng cách khai báo trong MXML hoặc ActionScript hoặc MXML + ActionScript (cách này hay dùng nhất) . Ngoài việc khai báo lập trình viên có thế kéo thả các thành phần này trong màn hình Design View ủa Flex Builder. 1.Hiểu rõ về MXML Vài trò của MXML trong một Flex Application cũng giống như vai trò của HTML hay XHTML trong một trang Web. Cả hai đều là ngôn ngữ đánh giấu (Markup Language) diễn tả giao diện người dùng (GUI) .Vì MXML dựa trên cú pháp của XML nên nó phải tuân theo luật của XML . Một tài liệu MXML phải là một dạng chuẩn (Well-Formed) của XML, gồm các yêu cầu sau: Mục tiêu bài học: 1. MXML trong Flex Buider 3.0 2. Action Script 3.0 trong Flex Builder 3.0 FlashCS4 Professional 100 +Một tài liệu MXML có thể chứa một hay nhiều tags hay là node +Một tài liệu MXML chỉ có thể chứa một thẻ gốc (root tag), thường là hoặc là , các thẻ khác được khai báo nằm trong thẻ này. +Mối node phải có thẻ đóng và thẻ mở hoặc +Các node con phải nằm giữa thẻ mở và thẻ đóng của node cha. +Giá trị các thuộc tính phải được chứa trong dấu nháy đơn ( ' ' ) hoặc là nháy kép ( “ “ ). Tất cả các tài liệu MXML đều bắt đầu bằng đoạn khai báo sau : Node gốc của một tài liệu thường là , bạn có thể sử dụng các thành phần khác để làm node gốc ví dụ , sự khác biệt ở đây là , tài liệu MXML nào chứa thẻ sẽ được dịch đâu tiên khi bạn dịch một ứng dụng. Đặc điểm của node gốc là nó miêu tả thành phần đó là cái chứa (container) các thành phần còn lại, ví dụ: <mx:Application xmlns:mx="" layout="absolute"> Hoặc FlashCS4 Professional 101 Bạn có thể để ý thấy mỗi node gốc đều chứa một tham chiếu đến namespace xmlns:mx="" . (chú ý là xmlns viết tắt của XML Namespace). Namespace tham chiếu đến một URI (Uniform Resource Identifier) , chứ không phải là tham chiếu đến trang web tại địa trỉ đó hay URL. Thay vì đó, ta sử dụng một URI độc nhất để cung cấp sự tham chiếu , tham chiếu này nói rằng tất cả các tags mà cùng sử dụng một tiền tố (trong trường hợp này là mx:) đến từ cùng một XML Vocabulary. Để hiểu rõ ý nghĩa của namespace bạn nên tham khảo các tài liệuTiếng Anh hoặc tra Wiki, bởi diễn đạt nó bằng Tiếng Việt rất khó. Sự tương tác giữa MXML với ActionScript khá là dễ hiểu, ta sẽ tìm hiểu qua đoạn code sau đây: <mx:Application xmlns:mx="" layout="absolute"> Đoạn MXML trên tạo ra một giao diện khá đơn giản, chỉ có một Button, đoạn code sẽ tạo ra một đối tượng của Button ActionScript 3.0 Class qua thẻ đồng thời cũng tạo ra id và label của đối tượng Button. Khi dịch , Flex sẽ sinh tương ứng các thẻ với các ActionScript 3.0 Class, sau đó trình Compiler sẽ dịch các ActionScript 3.0 Class này thành bytes code được chứa trong file SWF. 2.ActionScript 3.0 trong Flex Framework Các bạn đã được làm quen với ngôn ngữ ActionScript 3.0 trong Flash , tuy nhiên một số Class được viết lại trong Flex Framework sẽ không thể sử dụng trong Flash. Flex Framework kế thừa các thành phần đã có trong Flash và viết thêm các thành phần khác , đó là nguyên nhân Flash ko dùng được các thành phần có trong Flex. Còn Flex thì dùng được toàn bộ những thành phần đã có trong Flash, tuy nhiên lý thuyết là thế , còn để thực hiện sự tích hợp Flash vào Flex sẽ phài cấu hình thêm một vài thành phần , và tôi sẽ giành hẳn một bài để nói về vấn đề này. 3.Sử dụng ActionScript 3.0 và MXML trong Flex Builder 3 FlashCS4 Professional 102 Sau đây chúng ta sẽ viết một vài ví dụ sử dụng MXML và ActionScript 3.0 . Tạo một Project mới và đặt tên là ASWithMXML , chọn Web Application (Run on Flash Player) , click Finish. Thêm đoạn code sau vào : <mx:Application xmlns:mx="" layout="vertical"> <mx:Button id="myButton" label="Click Me!" click="clickHandler(event)"/> FlashCS4 Professional 103 Lưu ý thay đổi thuộc tính layout=”vertical” , điều này có ý nghĩa chương trình sẽ layout (trình bày) các Componet ở giữa màn hình và theo chiều từ trên xuống. Tiếp theo ta tạo ra một Button, đặt id để có thể sử dụng trong ActionScript và label là “Click Me! “ , khi click vào button thì ta sẽ gọi hàm clickHandler tham số truyền cho hàm này là một event (sự kiện), hàm này sẽ được viết và Xử lý trong ActionScript. Tiếp theo ta tạo một TextArea để hiện thị text ra ngoài màn hình, đặt id là “outPut” . Có thể bạn sẽ thắc mắc id có tác dụng gì trang các thẻ này , ở thẻ Button ta đặt id là “myButton” , điều này tương đương với đoạn code sau trong ActionScript : public var myButton : Button = new Button(). Đăc điểm khi đặt tên cho id là tên này phải là duy nhất. Tiếp theo ta thêm thẻ ỏ ngay dưới thẻ gốc , Flex Builder có một bộ gợi ý rất tốt , khi bạn gõ ” vào , bộ gợi ý (code hint) sẽ tự động sinh ra đoạn mã sau cho bạn , nếu không thấy xuất hiện bạn ấn tổ hợp phím “Ctrl + Space”. Kết quả như sau: <![CDATA[ ]]> Sau đó ta sẽ viết hàm clickHandler() để xử lý sự kiện click vào Button. <![CDATA[ private function clickHandler(e:MouseEvent):void { outPut.text += " My Button is Clicked!" +"\n"; } ]]> Đoạn code trên sẽ xử lý khi click vào Button, ta sẽ gọi hàm clickHandler , trong hàm này ta sẽ gán cho thuộc tính text của TextArea (có id là “outPut”) giá trị như trên. Vơi chú ý là “\n” là ký tự xuống dòng. Tham số truyền vào là e có kiểu là MouseEvent FlashCS4 Professional 104 Sau đây là toàn bộ code của ví dụ vừa rồi. <mx:Application xmlns:mx="" layout="vertical"> <![CDATA[ private function clickHandler(e:MouseEvent):void { outPut.text += " My Button is Clicked!" +"\n"; } ]]> <mx:Button id="myButton" label="Click Me!" click="clickHandler(event)"/> Lưu ý là tôi đã thêm thuộc tính width và height cho TextArea. Chọn Run → Run ASWithMXML, màn hình của bạn sẽ như sau: FlashCS4 Professional 105 Bài 4: MXML nâng cao Data Binding Đây là một tính năng mới trong các ngôn ngữ hiện đại hiện nay. Bạn hãy tìm hiểu kỹ để hiểu rõ tính năng mới này, vì nó sẽ rất hay được sử dụng khi bạn viết ứng dụng. Data Binding cho phép bạn “bind” một thuộc tính của một component đến một thuộc tính của một component khác, với chú ý là 2 thuộc tính này phải cùng kiểu.Hiểu một cách đơn giản Data Binding cho phép ta tạo ra một mối quan hệ giữa 2 thuộc tính của 2 component , một component gọi là source, một component gọi là destination và 2 thuộc tình phải có cùng kiểu , bất cứ khi nào thuộc tính của source thay đổi thì thuộc tính mà ta “bind” cho destination cũng ngay lập tức thay đổi theo. Lấy ví dụ đơn giản như sau, một giao diện có một TextInput ( ô nhập liệu) và một TextArea ( ô hiện thị text), ta sẽ code để khi người dùng đánh vào TextInput thì nội dung ở TextArea cũng sẽ hiện thị theo. Đánh đên đâu hiển thị đến đấy. Taọ một Project mới đặt tên là DataBinding, nhập đoạn code sau vòa : <mx:Application xmlns:mx="" layout="vertical"> Bạn để ý thấy tôi đã “bind” thuộc tính text của TextInput (có id là input) cho thuộc tính text của TextArea (có id là output) , 2 thuộc tính này đều có cùng kiểu là String nên Flex Builder sẽ ko báo lỗi. Mục tiêu bài học: 1. Quản lý dữ liệu trong MXML 2. Quản lý sự kiện trong MXML FlashCS4 Professional 106 Ta “bind” bằng 2 dấu “{“ và “}” , đây là cách “bind” đơn giản nhất trong Flex. Chạy ứng dụng để kiểm tra.Bạn nhập text vào ô TextInput, nội dung bạn vừa gõ sẽ ngay lập tức được hiển thị ở TextArea. Tôi xin nhắc lại cách hiểu DataBinding đơn giản nhất là, khi thuộc tính của source thay đổi thì thuộc tính được “bind” của destination ngay lập tức thay đổi theo. Với chú ý 2 thuộc tính “bind” cho nhau phải cùng kiểu. Sau đây là một vài tricks khi làm việc với dataBinding, sử dụng cách đơn giản nhất là 2 dấu “{“ và “}”. Sử dụng phép toán trong dataBinding <mx:Application xmlns:mx="" layout="vertical"> <mx:TextArea id="destination" text="{Number(source.text)*100}"/> <mx:Application xmlns:mx="" layout="vertical"> FlashCS4 Professional 107 <mx:TextArea id="destination" text="source's text you've entered is {source.text}"/> Các phép điều kiện <mx:Application xmlns:mx="" layout="vertical"> <mx:TextArea id="destination" text="{(source.selected) ? 'bạn đã Tick' : 'bạn chưa Tick'}"/> Sử dụng hàm của <mx:Application xmlns:mx="" layout="vertical"> <![CDATA[ private function xemdiem(truong:String):String { if (truong=="Bách Khoa Hà Nội") return "24"; else if(truong=="Kinh Tế Quốc Dân") return "25"; else if (truong=="Mỹ Thuật Công Nghiệp") return "22"; return "chưa cập nhật"; } ]]> FlashCS4 Professional 108 Bách Khoa Hà Nội Kinh Tế Quốc Dân Mỹ Thuật Công Nghiệp <mx:TextArea id="destination" text="{xemdiem(String(source.selectedItem))}"/> Lưu ý trong các ví dụ này bạn chưa cần quan tâm đến ý nghĩa của một vài dòng code, chúng ta sẽ tìm hiểu nó ở các bài sau. Sau đây là cách thứ 2 để sử dụng DataBinding, đó là sử dụng thẻ , cách sử dụng khá đơn giản như cách đầu. Cú pháp như sau Tương tự ta có thể thêm các phép thoán, điều kiện , hàm AS3 bào trong thẻ này. Phép Toán <mx:Application xmlns:mx="" layout="vertical"> <mx:Binding source="Number(source.text)*100" destination="destination.text"/> Điều Kiện FlashCS4 Professional 109 <mx:Application xmlns:mx="" layout="vertical"> <mx:Binding source="(source.selected) ? 'Bạn đã tick':'Bạn chưatick'" destination="destination.text"/> Dùng hàm AS3 <mx:Application xmlns:mx="" layout="vertical"> <![CDATA[ private function xemdiem(truong:String):String { if (truong=="Bách Khoa Hà Nội") return "24"; else if(truong=="Kinh Tế Quốc Dân") return "25"; else if (truong=="Mỹ Thuật Công Nghiệp") return "22"; return "chưa cập nhật"; } ]]> FlashCS4 Professional 110 Bách Khoa Hà Nội Kinh Tế Quốc Dân Mỹ Thuật Công Nghiệp <mx:Binding source="xemdiem(String(source.selectedItem))" destination="destination.text"/> Trong tất cả các ví dụ trên tôi đều cho thuộc tính layout của thẻ là “vertical”. Mặc định các đối tượng được tao ra bằng MXML đều có khả năng “bind”, để khai báo một biến có khả năng “bind” trong AS3 ta phải viết thẻ [Bindable] trên tên biến . <![CDATA[ import mx.collections.ArrayCollection; [Bindable] private var collection:Array; [Bindable] public var dataProvider:ArrayCollection; ]]> Thẻ [Bindable] gọi là thẻ MetaData, chỉ có tác dụng với một biến. Muốn bao nhiêu biến có khả năng “bind” thì phải có bấy nhiêu thẻ [Bindable] , và phải viết theo luật như trên. Có thể [Bindable] cho cả một Class. Bằng cách như sau: package FlashCS4 Professional 111 { [Bindable] public class BindMe { public function BindMe() { } } } Điều đó có nghĩa tất cả các thuộc tính trong Class BindMe đều có khả năng “bind”. Một chú ý nhỏ nữa là “bind” chỉ áp dụng cho thuộc tính (property), ko áp dụng cho phương thức (Method). Events trong MXML Trong các chương trước chúng ta đã được tìm hiểu và xử lý qua về các sự kiện (events) trong AS3 , như sự kiện Click , Double Click, Mouse_Over , Việc xử lý các events trong MXML khá là đơn giản hơn trong AS3 , và thường thì ta kết hợp cả AS3 và MXML để xử lý sự kiện, việc kết hợp này làm cho số lượng dòng code giảm đi rất nhiều. Sau đây ta tìm hiểu qua cách xử lý events vơi MXML + AS3 <mx:Application xmlns:mx="" layout="vertical"> <mx:Button click="output.text += 'Button is Clicked \n'" FlashCS4 Professional 112 mouseOver="output.text += 'Mouse Over Button \n' " mouseOut="output.text += 'Mouse Out Button \n' " mouseUp="output.text += 'Mouse Up Button \n' "/> Đây là cách xử lý event hoàn toàn bằng MXML, bạn có thể thấy no rất ngắn gọn. Chú ý rằng để viêt một String trong dấu ( “ “ ) ta dùng dấu ( ' ' ). Chạy chương trình ta có kết quả sau: Giả sử ta có rất nhiều Button cùng lắng nghe các sự kiện này, đây là lúc ta dùng đến AS3 đê xử lý, nếu chỉ dùng MXML thì code sẽ lại dài hơn. Sửa code trên thành như sau: FlashCS4 Professional 113 <mx:Application xmlns:mx="" layout="vertical"> <mx:Button id="btn1" label="Button 1" click="clickHandler(event)" mouseOver="overHandler(event)" mouseOut="outHandler(event)" mouseUp="upHandler(event)"/> <mx:Button id="btn2" label="Button 2" click="clickHandler(event)" mouseOver="overHandler(event)" mouseOut="outHandler(event)" mouseUp="upHandler(event)"/> <mx:Button id="btn3" label="Button 3" click="clickHandler(event)" mouseOver="overHandler(event)" mouseOut="outHandler(event)" mouseUp="upHandler(event)"/> FlashCS4 Professional 114 Bây h khi các even xảy ra ta sẽ gọi các hàm tương ứng để xử lý, truyền vào các hàm này tham số là “event” , bắt buộc phải viết “event” ko được viết “evt” hay “e”,.. Tiếp theo ta thêm thẻ ở dưới thẻ , viết các hàm xử lý các sự kiện đó. Sau đây là code đầy đủ của ví dụ vừa rồi : <mx:Application xmlns:mx="" layout="vertical"> <![CDATA[ private function clickHandler(e:MouseEvent):void { var result:String = ""; switch(e.currentTarget) { case btn1 : result = "Button 1"; break; case btn2 : result = "Button 2"; break; case btn3 : result = "Button 3";break; } output.text = result + " is Clicked"; } FlashCS4 Professional 115 private function overHandler(e:MouseEvent):void { var result:String = ""; switch(e.currentTarget) { case btn1 : result = "Button 1"; break; case btn2 : result = "Button 2"; break; case btn3 : result = "Button 3";break; } output.text = result + " is Over"; } private function outHandler(e:MouseEvent):void { var result:String = ""; switch(e.currentTarget) { case btn1 : result = "Button 1"; break; case btn2 : result = "Button 2"; break; case btn3 : result = "Button 3";break; } output.text = result + " is Out"; } private function upHandler(e:MouseEvent):void { FlashCS4 Professional 116 var result:String = ""; switch(e.currentTarget) { case btn1 : result = "Button 1"; break; case btn2 : result = "Button 2"; break; case btn3 : result = "Button 3";break; } output.text = result + " is Up"; } ]]> <mx:Button id="btn1" label="Button 1" click="clickHandler(event)" mouseOver="overHandler(event)" mouseOut="outHandler(event)" mouseUp="upHandler(event)"/> <mx:Button id="btn2" label="Button 2" click="clickHandler(event)" mouseOver="overHandler(event)" mouseOut="outHandler(event)" mouseUp="upHandler(event)"/> FlashCS4 Professional 117 <mx:Button id="btn3" label="Button 3" click="clickHandler(event)" mouseOver="overHandler(event)" mouseOut="outHandler(event)" mouseUp="upHandler(event)"/> Chú ý thuộc tính currentTarget của biến e . currentTarget ở đây chinh là đối tượng lắng nghe và nhận được sự kiện đó. Ở đây có 3 đối tượng là btn1 , btn2 , btn3 cùng lắng nghe các luồng sự kiện giống nhau, để xác định chính xác đối tượng nào vừa nhận được event thì ta dùng thuộc tính currentTarget của MouseEvent (biến e có kiểu MouseEvent) . Qua đây ta có thể thấy sự kết hợp MXML + AS3 làm cho các dòng code trở nên sáng sủa hơn rất nhiều , nhưng người Design hay một người chưa hề biết về MXML cũng có thể hiểu được ngay. Các Component của Flex có rất nhiều event, tôi ko thể liệt kê hết ra được, cách dùng chủ yếu dựa vào kinh nghiệm. Để tham khảo bạn có thể vào Help → Help Content , gõ vào một Component bạn muốn xem , ví dụ TextInput để tham khảo. Lưu ý khi bạn sủ dụng Help lần đầu tiên, Flex Builder sẽ mất thời gian để index các file,bạn phải đợi cho Flex Builder index xong nên lần khởi động đầu sẽ rất lâu, tùy vào cấu hình của máy bạn. Ở lần thứ 2 thì sẽ nhanh hơn. FlashCS4 Professional 118 Với Help Engine bạn có thể tra các thuộc tính (Properties), phương thức (Methods) , sự kiện (events) , Styles , hiệu ứng (Effects) của các Component có sẵn trong Flex Builder 3. Chú ý , ý nghĩa của các events được viết bằng tiếng Anh ngay bên cạnh, nên bạn phải dịch ra để biết các events đó xảy ra khi nào. FlashCS4 Professional 119 Bài 5: Component trong Flex Framework \ Layout Container Trước tiên ta làm quen với một vài Layout rất hay dùng trong Flex. 1.VBox (Vertical Box) Các component được chứa trong Vbox sẽ được layout (sắp xếp, bố cục) từ trên xuống dưới. Chú ý rằng nó giống thuộc tính Layout của thẻ , layout=”vertical” <mx:Application xmlns:mx="" layout="vertical"> Mục tiêu bài học: 1. Layout Container. 2. HBox. 3. Panel 4. Form 5. ControlBar 6. Navigator Container 7. ViewStack Container 8. Accordion Container 9. TabNavigator Container 10. Flex và XML 11. Repeater Component 12. Flex và CSS FlashCS4 Professional 120 2.HBox (Horizontal-Box) Các Component chưa trong Hbox sẽ được layout theo chiều từ trái sang phải.Tương đương với trường hợp thuộc tính layout của thẻ là layout=”horizontal”. <mx:Application xmlns:mx="" layout="vertical"> FlashCS4 Professional 121 3.Panel Trong thẻ có thuộc tính layout giống với của thẻ . Sẽ có 3 giá trị cho thuộc tính layout là “vertical”, “horizontal”,”absolute”. 4.Form Vào các forum hay trang Web nào bắt đăng ký , ta thường thấy các Form nhập liệu để đăng nhập, và đây là cách tạo ra Form trong Flex . <mx:Application xmlns:mx="" layout="vertical"> FlashCS4 Professional 122 5.ControlBar Component này thường đi theo Panel, sử dụng như sau: <mx:Application xmlns:mx="" layout="vertical"> FlashCS4 Professional 123 FlashCS4 Professional 124 Để biết thêm các Layout Container nữa hỗ trợ trong Flex, bạn chuyển sang chế độ Design View, tìm trong Panel Component. Navigator Container Thành phần cơ bản nhất của các Navigator Container này là ViewStack Container, ta sẽ tìm hiểu ViewStack Container trước. FlashCS4 Professional 125 ViewStack Container Dùng ViewStack trong trường hợp nào. Giả sử bây h ta có 4 panel : Tin Tức , Sự Kiện, Thể Thao, Thời Tiết. Giờ ta muốn cho nó vào một Container và có nút điều khiển để chuyển sang các Panel khác. Đây là lúc cần dùng ViewStack, cho phép chứa nhiều “View” vào một cái Stack để quản lý. Tạo một Project mới, đặt tên là NavigatorContainer. Nhập đoạn code sau vào. <mx:Application xmlns:mx="" layout="vertical"> Khi chạy chương trình bạn sẽ chỉ thấy Panel Tin Tức, và chưa có nút điều khiển để chuyển sang các Panel khác. Thêm thẻ sau vòa ở trên thẻ Bạn chú ý đên thuộc tính dataProvider , có thể hiểu là “cái cung cấp dữ liệu” cho ButtonBar ở đây là ViewStack (id là “vs”). Sử dụng dấu “{ }” để “bind” dữ liệu. Sau đây là code đầy đủ: <mx:Application xmlns:mx="" layout="vertical"> FlashCS4 Professional 126 Chú ý tôi đã thêm thuộc tính label cho các Panel , ButtonBar sẽ lấy các label để làm label cho các Button của mình. Chạy ứng dụng, kết quả như sau: Đến đây có thể các bạn đã hiểu phần nào về các Navigator Container Bạn có thể thay thẻ : FlashCS4 Professional 127 Thành : hoặc hoặc Chạy ứng dụng và tìm thấy trải nghiệm cho riêng mình. Accordion Container Đây là một Container khá hay, có thể bạn đã nhìn thấy ở nhiều trang Web. Tạo Project mới và thêm đoạn code đây vào. <mx:Application xmlns:mx="" layout="vertical"> FlashCS4 Professional 128 Canvas là một Container hay dùng, và là Container đơn giản nhất, chỉ đơn thuần có một vùng hiển thị và ko có layout. Chạy ứng dụng , kết quả như sau: TabNavigator Container Sủa đoạn code sau của Project trên. FlashCS4 Professional 129 Thành Chạy và trải nghiệm Chú ý ở phần Container. Các bạn có thể thấy các Container có khả năng chứa (contain) các Component khác trong nó, như Label, Button, TextArea. Còn các Label, Button,TextArea,.. ko phải là các Container nên nó không có khả năng chứa các Component khác trong nó. Để khai bảo một Component nằm trong một Container bằng MXML ta sử dụng như sau: Khia báo trên có nghĩa là có một Component là Label nằm trong một Container là Canvas. Nó tương đương với câu lệnh addChild trong AS3. Để ý dấu “/” của thẻ và dấu “/” của thẻ , dấu “/” gọi là dấu đóng thẻ, khi khai báo một thẻ trong MXML thì phải có dấu “/” báo hiệu kết thúc một thẻ. Có 2 cách khai báo khi nào đóng thẻ, một là , hoặc . Khi một thẻ nằm giữa thẻ đóng và thẻ mở của một thẻ khác thì nó là con của thẻ đó, hay bị chứa bởi thẻ đó. Để biết là Container hay Component ta có thẻ tra Help FlashCS4 Professional 130 Canvas là con của lớp Container trong FlexFramework, do đó theo quy luật cha con trong hướng đối tượng, Canvas sẽ có khả năng chứa các Component khác trong nó. Bản thân Canvas cũng có thể chứa một Canvas khác trong nó. Flex và XML Nếu một trong số các bạn từng lập trình C hay Java hay C# , ở phần đọc file, các bạn thường lưu file có đuôi .dat để lưu dữ liệu trong đó. Trong file .dat các bạn tự lưu trữ dữ liểu của mình thành từng dòng, cách nhau bởi một ký tự nào đó do bạn quy định. Đến khi đọc dữ liệu bạn cũng phải thiết lập một quy trình riêng để đọc file đó .Đây là cách lưu dữ liệu truyền thống và người bắt đầu thường gặp khó khăn. Internet ra đời đòi hỏi phải có một định dạng file chuẩn để giao tiếp. Và XML đã ra đời theo mục đích đó, với cấu trúc đơn giản, dễ hiểu, dễ xử lý hơn cách lưu trữ truyền thống vào các file. Lúc đầu tôi cũng đã giới thiệu MXML là một ngôn ngữ đánh dấu dựa theo XML (XML-based) , nên qua các ví dụ trước về MXML có thể bạn cũng đã hiểu qua về cấu trúc của file XML. Nó là ngôn ngữ đánh dấu, gồm một thẻ gốc (root) và nhiều thẻ con ở bên trong. Có thể hiểu trực quan thẻ root như một cái hộp bao ở ngoài cùng, bên trong cái hộp này lại chứa các hộp con khác, trong các hộp con cũng có thể chứa các hộp con khác nữa. Đồ vật ở bên trong các hộp con chính là dữ liệu của mà chúng ta cần. Để lấy được nội dung trong các hộp con ta phải biết địa trỉ hay vị trí của cái hộp đó so với hộp gốc để lấy. XML khác HTML , MXML , XHTML ở chỗ , trong HTML , MXML, XHTML định nghĩa sẵn các thẻ, và ta buộc phải hiểu rõ chức năng của thẻ đó để dùng. Trong XML cho ta tự địn nghĩa các thẻ, miến sao bạn thấy dễ hiểu nhất cho mình cũng như cho người đọc. Nòa hãy xem qua một file XML đơn giản. Nguyen Thach Duong FlashCS4 Professional 131 21 Ha Noi abc@gmail.com thachduong 123456 Nguyen Thach Duong 21 Ha Noi abc@gmail.com thachduong 123456 Bui Trung Hieu 21 Ha Noi abc@gmail.com trunghieubui 123456 Nguyen Hoang Bach 21 Ha Noi abc@gmail.com FlashCS4 Professional 132 hoangbach 123456 Nguyen Thanh Linh 21 Ha Noi abc@gmail.com thanhlinh 123456 Ta thấy hộp bao ngoài cùng hay thẻ gốc của file XML trên là (lưu ý là có thẻ mở và thẻ đóng), bên trong nó có 4 hộp con là trong mổi hộp này lại có các hộp con là , , , Nội dung của các hộp con này chính là dữ liệu , nội dung của thẻ là tên người, là tuổi, Khi Flex đọc file XML này, các thẻ sẽ được chuyển thành các Object để sử dụng trong MXML hoặc AS3. Bây h ta sẽ dùng Flex đọc file XML này , rồi hiển thị lên một DataGrid. Bật Notepad bằng cách vào Start → Run → gõ Notepad → ấn Enter. Copy nội dung file xml trên vào rồi save lại với tên members.xml. Tạo một Project mới đặt tên là FlexAndXML , trong thư mục src, nhật chuột phải → new → Folder, đặt tên folder mới là assets. FlashCS4 Professional 133 Chuột phải vòa thư mục assets vừa tạo , chọn New → Folder, đặt tên là xml . Copy file members.xml bạn vừa tạo rồi Paste vòa thư mục xml mới tạo này. FlashCS4 Professional 134 Trong file FlexAndXML.mxml , thêm thẻ sau ở dưới thẻ Đối tượng HTTPService chuyên dùng để đọc các dữ liệu bên ngoài, nếu bạn từng làm AJAX thì nó giống đối tượng XMLHttpRequest. Cấp cho đối tượng HTTPService id để sự dụng trong ActionScript , rồi cấp đường dẫn url đến file cần đọc , url có thể là đường dẫn đến một file xml ở trên mạng, trường hợp này ta phải nhập Tiếp theo trong thẻ thêm sự kiện creationComplete. <mx:Application xmlns:mx="" layout="vertical" creationComplete="memData.send()"> Chú ý tôi thường xuyên để layout=”vertical”. Để hiển thị dữ liệu ta dùng một DataGrid, khai báo một đối tượng DataGrid và xử lý thuộc tính dataProvider cho nó. Lưu ý thuộc tính dataProvider có kiểu là một mảng các dữ liệu, có thể là Array, ArrayCollection, hay XMLList. Câu lệnh memData.lastResult cho ra đối tượng file XML, memData.lastResult.members.member cho ta một mảng các Object member . Chạy chương trình , kêt quả như sau: Có vẻ khá ổn , nhưng trường hợp bản đang quản trị một Forum và muốn dấu Password cũng như Location của người dùng. Đồng thời cũng muốn sắp xếp lại thứ tự các cột trong DataGrid. Ta phải thay đổi một chút code thành như sau: FlashCS4 Professional 135 <mx:Application xmlns:mx="" layout="vertical" creationComplete="memData.send()"> <![CDATA[ import mx.controls.Alert; import mx.rpc.events.FaultEvent; import mx.rpc.events.ResultEvent; import mx.collections.ArrayCollection; [Bindable] private var collection:ArrayCollection; private function resultHandler(e:ResultEvent):void { collection = e.result.members.member; } private function faultHandler(e:FaultEvent):void { Alert.show(e.fault.faultDetail); } ]]> <mx:HTTPService id="memData" url="assets/xml/members.xml" result="resultHandler(event)" fault="faultHandler(event)"/> FlashCS4 Professional 136 <mx:DataGridColumn headerText="Full Name" dataField="name"/> Sự thay đổi đầu tiên là ta khai báo một biến collection có kiểu ArrayCollection (kiểu dữ liệu tập hợp) , bạn để ý thấy ngay trên nó có một thẻ là [Bindable] , tức là có thể binding cho Component khác Ta bind collection cho thuộc tính dataProvider của DataGrid. Tức là bất cứ khi nào dữ liệu của collection thay đổi thì dữ liệu của dataProvider của DataGrid thay đổi theo ngay lập tức. Tiếp theo ta sử lý 2 sự kiện thông dụng của lớp HTTPService là result và fault. Khi có result ta sẽ gọi hàm resultHandler để xử lý. Nếu có lỗi (fault) thì hàm faultHandler sẽ được gọi. Trong hàm resultHandler(e:ResultEvent), ta gán cho collection tập hợp các member trong file members.xml. Khi collection cập nhật xong , lập tức dataProvider của DataGrid được cập nhật theo. Nếu có lỗi, ta sẽ hiện một Alert cho người dùng biết lỗi. Chú ý các dòng Import: import mx.controls.Alert; import mx.rpc.events.FaultEvent; import mx.rpc.events.ResultEvent; import mx.collections.ArrayCollection; Trong thẻ DataGrid ta khai báo một màng các columns. Trong columns có các DataGridColumn , ta gán cho nó một headerText , và dataField. Chú ý rằng dataField chính là tên các thẻ con của thẻ member trong file members.xml. Chạy chươn trình , kết quà như sau: FlashCS4 Professional 137 Repeater Component Để hiểu ý nghĩa của Repeater Component ta sẽ tìm hiểu qua ví dụ sau. Ta sẽ mô phỏng một chương trình trắc nghiệm kiến thức. Dữ liệu được lưu trong file questions.xml. Nội dung file này như sau: 1 Con gì tám cẳng 2 càng, một mai 2 mắt bò ngang trên bờ Cua Gà Hổ Báo Cua 2 1+1=? FlashCS4 Professional 138 2 10 5 7 10 3 Nhóm Rock nào sáng tác bài Khám Phá Bức Tường Thủy Triều Đỏ Microway Thánh Giá Đỏ Bức Tường 4 Ngôn ngữ nào thuần hướng đối tượng đầu tiên Java C Sharp C++ Action Script 3.0 Java FlashCS4 Professional 139 Ta thấy thẻ gốc là , trong thẻ này gồm một tập hợp (Collection) các thẻ trong mỗi thẻ lại có các thẻ ,,... Phần giao diện , ta muốn hiển thị mỗi phần gồm 1 hàng là câu hỏi, 1 hàng là các đáp án. Dễ nhận thấy sẽ có 4 phần như vậy vì có 4 thẻ , và phần nào cũng giống nhau về giao diện. Đây là lúc ta dùng đến Repeater Component. Tạo Project mới tên là Repeater, tọa thư mục assets/xml trong thư mục src. Tọa file questions.xml có nội dung như trên rồi cho copy/paste vào thư mục xml. Tương tự như phần đọc XML bằng Flex ta nhập đoạn code sau: <mx:Application xmlns:mx="" layout="vertical" creationComplete="questionData.send()" > <![CDATA[ import mx.controls.Alert; import mx.rpc.events.FaultEvent; import mx.rpc.events.ResultEvent; import mx.collections.ArrayCollection; [Bindable] private var collection:ArrayCollection; private function resultHandler(e:ResultEvent):void { trace("ok"); collection = e.result.questions.question; trace(collection.length); } FlashCS4 Professional 140 private function faultHandler(e:FaultEvent):void { Alert.show(e.fault.faultDetail,"ERROR"); } ]]> <mx:HTTPService id="questionData" url="assets/xml/questions.xml" result="resultHandler(event)" fault="faultHandler(event)"/> Biến collection sẽ lưu trữ một tập hợp các Object question , và ta sẽ làm dataProvider cho Repeater Component của chúng ta. Khai báo một Repeater Object như sau Tiếp theo ta thêm một Label trong Repeater để hiện thị câu hỏi, và 4 RadioButton để hiển thị các đáp án. Ta đưa 4 RadioButton này vào một Hbox để layout theo chiều từ trái sang phải. Chú ý rằng layout của là vertical nên Label và Hbox sẽ lại được layout theo chiều từ trên xuống. Nhập tiếp đoạn code sau <mx:RadioButton label="{rpt.currentItem.dapanA}" groupName="{rpt.currentItem.id}"/> FlashCS4 Professional 141 <mx:RadioButton label="{rpt.currentItem.dapanB}" groupName="{rpt.currentItem.id}"/> <mx:RadioButton label="{rpt.currentItem.dapanC}" groupName="{rpt.currentItem.id}"/> <mx:RadioButton label="{rpt.currentItem.dapanD}" groupName="{rpt.currentItem.id}"/> Tabind thuộc tính text của Label và thuộc tính label của RaidoButton cho rpt.currentItem. Lưu ý rpt.currentItem chính là một đối tượng question đã load từ XML ra. Mỗi đối tượng question lại chứa các đối tượng id,name,dapanA... và đế lấy giá trị của các object này ta dùng toán tử “.” đế lấy. Rpt.currentItem.name cho ra name của question, giá trị giống với giá trị của thẻ trong thẻ Ta để các RadioButton theo từng Group đê cho người dùng chỉ chọn được một lựa chọn. Group các RadioButton của các câu hỏi lại phải khác nhau, nên ta đặt groupName theo id của từng câu hỏi. Chạy ứng dụng , kết quả sẽ như sau: FlashCS4 Professional 142 State Và Transition Trong Flex không có Timeline nhưng có state để ta định nghĩa các trạng thái (state) của một chương trình , đồng thời cũng cho phép tạo các animation để chuyển (transition) giữa các state đó. Làm cho khả năng tương tác của ứng dụng trở nên hấp dẫn hơn Tạo Project mói, đặt tên là StateTransition. Chuyển sang Design View. Kéo thả 2 Panel và 2 Button vào , bố trí như hình vẽ. Nhấp đúp vào thanh Title của Panel để đặt tên hoặc vào khung Properties để thiết lập các thuộc tính FlashCS4 Professional 143 đặt id và title cho Panel như trên. Đặt label cho 2 button là Next và Prev Chuyển sang màn hình Source, Flex Builder sẽ tự động sinh mã như sau: <mx:Application xmlns:mx="" layout="absolute"> <mx:Panel x="88.5" y="100" width="250" height="200" layout="absolute" title="Panel 1" id="panel1"> <mx:Panel x="240" y="10" width="177" height="82" layout="absolute" title="Panel2" id="panel2"> Chuyển lại sang màn hình Desing , làm tiếp như sau: Vào khung State , chuột phải vào rồi chọn New State. Khung New State hiện ra , bạn điền tiếp như sau: FlashCS4 Professional 144 Đặt tên state mới là “result” và Based on: , trong state mới, ta điều chỉnh lại vị trí cũng như kích thước của các panel như hình sau. Bạn để ý rằng ta đang ở trong state result . Click vào Based state , rồi vòa result đê thấy sự thay đổi ở màn hình Design. Bây giờ ta sẽ tạo ra transition để chuyển giữa 2 state này . Nhập đoạn code sau vào: FlashCS4 Professional 145 Thuộc tính fromState=”*” và toState=”*” báo hiệu rằng khi chuyển bất kì từ state nào sang state nào thì đều chạy một effect là “changeTheState”. ChangeTheState là id của một Parallel, trong Parallel chứa 2 effect là Move và Resize. Cung cấp cho 2 effect này targets, targets ở đây là mảng các đối tượng chị sự tác động của 2 effect này. Trong trường hợp này là panel1 và panel2. Lưu ý là panel1 và panel2 là 2 id của đối tượng Panel. 2 Effect này đặt trong thẻ có nghĩa là chúng cùng chạy song song với nhau, Move và Resize cùng chạy động thời. Ngoài thẻ còn có thẻ , nghĩa là chạy tuần tự từng effect một. Giờ ta cần một sự kiện nào đó phát ra để chuyển giữa 2 state này. Thêm sự kiện click cho 2 Button, và xử lý như sau: currentState=' ' tức là quay về Base state. CurrentState= ' result ' tức là chuyển sang state result . Toaàn bộ Code của chương trình sẽ như sau: <mx:Application xmlns:mx="" layout="absolute"> <mx:SetProperty target="{panel1}" name="width" value="201"/> <mx:SetProperty target="{panel1}" name="height" value="82"/> <mx:SetProperty target="{panel2}" name="width" value="240"/> <mx:SetProperty target="{panel2}" name="height" value="200"/> FlashCS4 Professional 146 <mx:Panel x="88.5" y="100" width="250" height="200" layout="absolute" title="Panel 1" id="panel1"> <mx:Panel x="240" y="10" width="177" height="82" layout="absolute" title="Panel2" id="panel2"> <mx:Button x="352" y="278" label="Next" click="currentState='result' "/> Với chú ý , . Chạy ứng dụng. FlashCS4 Professional 147 CSS With Flex Nếu bạn nào đã từng làm Web chắc chắn sẽ ko thể ko biết tới CSS, nó giúp cho ta đồng bộ hóa giao diện một cách nhanh chóng. Sau đây ta sẽ tìm hiểu cách sử dụng CSS một cách cơ bản trong Flex. Tạo Project mới đặt tên là CSSWithFlex. Chuột phải vào folder src chọn New → CSS File , đặt tên là main.css. Truy cập vào địa trỉ sau, Bạn chọn phần Button , rồi làm một vài tinh chỉnh nhỏ , ở panel CSS sẽ hiện ra ngay các code CSS , bạn copy nó rồi paste vào file main.css. Trong fiel CSSWithFlex.mxml . Bạn nhập đoạn code sau: FlashCS4 Professional 148 <mx:Application xmlns:mx="" layout="absolute"> Trong thẻ Style, bạn cấp đường dẫn đên file main.css. Flex sẽ tự động nhúng file css vào file SWF. Bạn có thể tùy biến Panel, hoặc các Component khác trong trang nãy tôi vừa cấp, rồi paste vào file main.css. /* CSS file */ Button { cornerRadius: 20; textIndent: 0; highlightAlphas: 0.4, 0.48; fillColors: #000000, #666666, #006699, #eeeeee; color: #ffffff; textRollOverColor: #0b333c; themeColor: #666666; } Panel { borderColor: #000000; borderAlpha: 0.52; roundedBottomCorners: true; cornerRadius: 8; titleStyleName: "mypanelTitle"; } .mypanelTitle { color: #ffffff; FlashCS4 Professional 149 textAlign: center; } <mx:Application xmlns:mx="" layout="absolute"> <mx:Panel title="My Custom Skin Panel" x="104.5" y="87" width="218" height="189"/>

Các file đính kèm theo tài liệu này:

  • pdfflashcs4_dhbkhn_3197.pdf
Tài liệu liên quan