rename DataBindingTest* to DataBindingExample*
Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/9c7e00b1 Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/9c7e00b1 Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/9c7e00b1 Branch: refs/heads/develop Commit: 9c7e00b1c09c397933d84796a94fed044cfb5c49 Parents: b7fba06 Author: Alex Harui <[email protected]> Authored: Fri Aug 21 09:36:11 2015 -0700 Committer: Alex Harui <[email protected]> Committed: Fri Aug 21 09:36:11 2015 -0700 ---------------------------------------------------------------------- examples/DataBindingExample/build.xml | 47 +++ .../DataBindingExample/src/DataBindingTest.mxml | 53 ++++ .../DataBindingExample/src/MyInitialView.mxml | 144 ++++++++++ examples/DataBindingExample/src/README.txt | 52 ++++ .../src/StockDataJSONItemConverter.as | 40 +++ .../src/controllers/MyController.as | 81 ++++++ .../DataBindingExample/src/models/MyModel.as | 125 ++++++++ examples/DataBindingExample_Flat/build.xml | 48 ++++ .../src/DataBindingTest.mxml | 53 ++++ .../src/MyInitialView.mxml | 144 ++++++++++ examples/DataBindingExample_Flat/src/README.txt | 52 ++++ .../src/StockDataJSONItemConverter.as | 40 +++ .../src/controllers/MyController.as | 81 ++++++ .../src/models/MyModel.as | 125 ++++++++ examples/DataBindingExample_as/build.xml | 47 +++ .../src/DataBindingTest.as | 257 +++++++++++++++++ .../DataBindingExample_as/src/MyInitialView.as | 283 +++++++++++++++++++ .../src/StockDataJSONItemConverter.as | 40 +++ .../src/controllers/MyController.as | 81 ++++++ .../DataBindingExample_as/src/models/MyModel.as | 127 +++++++++ examples/DataBindingTest/build.xml | 47 --- .../DataBindingTest/src/DataBindingTest.mxml | 53 ---- examples/DataBindingTest/src/MyInitialView.mxml | 144 ---------- examples/DataBindingTest/src/README.txt | 52 ---- .../src/StockDataJSONItemConverter.as | 40 --- .../src/controllers/MyController.as | 81 ------ examples/DataBindingTest/src/models/MyModel.as | 125 -------- examples/DataBindingTest_Flat/build.xml | 48 ---- .../src/DataBindingTest.mxml | 53 ---- .../DataBindingTest_Flat/src/MyInitialView.mxml | 144 ---------- examples/DataBindingTest_Flat/src/README.txt | 52 ---- .../src/StockDataJSONItemConverter.as | 40 --- .../src/controllers/MyController.as | 81 ------ .../DataBindingTest_Flat/src/models/MyModel.as | 125 -------- examples/DataBindingTest_as/build.xml | 47 --- .../DataBindingTest_as/src/DataBindingTest.as | 257 ----------------- .../DataBindingTest_as/src/MyInitialView.as | 283 ------------------- .../src/StockDataJSONItemConverter.as | 40 --- .../src/controllers/MyController.as | 81 ------ .../DataBindingTest_as/src/models/MyModel.as | 127 --------- 40 files changed, 1920 insertions(+), 1920 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9c7e00b1/examples/DataBindingExample/build.xml ---------------------------------------------------------------------- diff --git a/examples/DataBindingExample/build.xml b/examples/DataBindingExample/build.xml new file mode 100644 index 0000000..9c551dd --- /dev/null +++ b/examples/DataBindingExample/build.xml @@ -0,0 +1,47 @@ +<?xml version="1.0"?> +<!-- + + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +--> + + +<project name="databindingtest" default="main" basedir="."> + <property name="FLEXJS_HOME" location="../.."/> + <property name="example" value="DataBindingTest" /> + + <property file="${FLEXJS_HOME}/env.properties"/> + <property environment="env"/> + <property file="${FLEXJS_HOME}/build.properties"/> + <property name="FLEX_HOME" value="${FLEXJS_HOME}"/> + <property name="FALCON_HOME" value="${env.FALCON_HOME}"/> + <property name="FALCONJX_HOME" value="${env.FALCONJX_HOME}"/> + <property name="GOOG_HOME" value="${env.GOOG_HOME}"/> + + <include file="${basedir}/../build_example.xml" /> + + <target name="main" depends="clean,build_example.compile,build_example.compilejs" description="Clean build of ${example}"> + </target> + + <target name="clean"> + <delete dir="${basedir}/bin" failonerror="false" /> + <delete dir="${basedir}/bin-debug" failonerror="false" /> + <delete dir="${basedir}/bin-release" failonerror="false" /> + </target> + + + +</project> http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9c7e00b1/examples/DataBindingExample/src/DataBindingTest.mxml ---------------------------------------------------------------------- diff --git a/examples/DataBindingExample/src/DataBindingTest.mxml b/examples/DataBindingExample/src/DataBindingTest.mxml new file mode 100644 index 0000000..751e427 --- /dev/null +++ b/examples/DataBindingExample/src/DataBindingTest.mxml @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +--> +<js:Application xmlns:fx="http://ns.adobe.com/mxml/2009" + xmlns:local="*" + xmlns:js="library://ns.apache.org/flexjs/basic" + xmlns:models="models.*" + xmlns:controllers="controllers.*" + initialize="MyModel(model).stockSymbol='ADBE'" + > + <js:valuesImpl> + <js:SimpleCSSValuesImpl /> + </js:valuesImpl> + <js:initialView> + <local:MyInitialView /> + </js:initialView> + <js:model> + <models:MyModel /> + </js:model> + <js:controller> + <controllers:MyController /> + </js:controller> + <js:beads> + <js:HTTPService id="service"> + <js:LazyCollection id="collection"> + <js:inputParser> + <js:JSONInputParser /> + </js:inputParser> + <js:itemConverter> + <local:StockDataJSONItemConverter /> + </js:itemConverter> + </js:LazyCollection> + </js:HTTPService> + <js:CSSFontFaceBead /> + <js:ViewSourceContextMenuOption /> + </js:beads> +</js:Application> http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9c7e00b1/examples/DataBindingExample/src/MyInitialView.mxml ---------------------------------------------------------------------- diff --git a/examples/DataBindingExample/src/MyInitialView.mxml b/examples/DataBindingExample/src/MyInitialView.mxml new file mode 100644 index 0000000..667254d --- /dev/null +++ b/examples/DataBindingExample/src/MyInitialView.mxml @@ -0,0 +1,144 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +--> +<js:ViewBase xmlns:fx="http://ns.adobe.com/mxml/2009" + xmlns:js="library://ns.apache.org/flexjs/basic" + initComplete="initControls()"> + <fx:Script> + <![CDATA[ + import models.MyModel; + + import org.apache.flex.events.CustomEvent; + + private var _symbol:String; + + public function get symbol():String + { + return _symbol; + } + + public function get requestedField():String + { + return radio1.selectedValue as String; + } + + [Bindable] + public var fieldText:String; + + private function radioChanged(e:org.apache.flex.events.Event):void + { + dispatchEvent(new CustomEvent("radioClicked")); + fieldText = RadioButton(e.target).text; + } + + private function initControls():void + { + list.selectedItem = MyModel(applicationModel).stockSymbol; + radio1.selectedValue = MyModel(applicationModel).requestedField; + if (radio1.selected) + fieldText = radio1.text; + else if (radio2.selected) + fieldText = radio2.text; + else if (radio3.selected) + fieldText = radio3.text; + else if (radio4.selected) + fieldText = radio4.text; + + } + + private function setState():void + { + currentState = showAllData.selected ? "showAll" : "hideAll"; + } + ]]> + </fx:Script> + <fx:Style> + @namespace basic "library://ns.apache.org/flexjs/basic"; + + .output { + font-size: 20px; + } + + .topContainer { + padding: 10px; + + } + .leftSide { + vertical-align: top; + margin-right: 10px; + } + + .rightSide { + vertical-align: top; + margin-left: 10px; + padding-left: 10px; + } + + .quoteButton { + margin-top: 10px; + margin-bottom: 10px; + } + </fx:Style> + <js:states> + <js:State name="hideAll" /> + <js:State name="showAll" /> + </js:states> + <js:beads> + <js:ViewBaseDataBinding /> + </js:beads> + <js:Container x="0" y="0" className="topContainer" > + <js:beads> + <js:VerticalLayout /> + </js:beads> + <js:Label width="300" text="Enter Stock Symbol or choose from list:" /> + <js:Container> + <js:beads> + <js:HorizontalLayout /> + </js:beads> + <js:Container className="leftSide"> + <js:beads> + <js:VerticalLayout /> + </js:beads> + <js:TextInput id="symbolTI" text="{MyModel(applicationModel).stockSymbol}" /> + <js:TextButton text="Get Quote" className="quoteButton" + click="_symbol = symbolTI.text; dispatchEvent(new CustomEvent('buttonClicked'))" /> + <js:Label id="field" text="{fieldText}"/> + <js:Label className="output" height="24" text="{MyModel(applicationModel).responseText}" /> + </js:Container> + <js:Container className="rightSide"> + <js:beads> + <js:VerticalLayout /> + </js:beads> + <js:DropDownList id="list" width="100" + change="_symbol = list.selectedItem as String; dispatchEvent(new CustomEvent('listChanged'))" + dataProvider="{MyModel(applicationModel).strings}" /> + <js:RadioButton id="radio1" text="Price" value="Ask" groupName="group1" change="radioChanged(event)"/> + <js:RadioButton id="radio2" text="Change" value="Change" groupName="group1" change="radioChanged(event)"/> + <js:RadioButton id="radio3" text="Day's High" value="DaysHigh" groupName="group1" change="radioChanged(event)"/> + <js:RadioButton id="radio4" text="Day's Low" value="DaysLow" groupName="group1" change="radioChanged(event)"/> + <js:CheckBox id="showAllData" text="Show All Data" change="setState()" /> + </js:Container> + </js:Container> + <js:Label id="bindtest" text="{fieldText + ' expression binding'}" /> + <js:Label width="300" text.showAll="110" includeIn="showAll" /> + <js:TextArea id="ta" width="300" height="100" height.showAll="110" + includeIn="showAll" + text="{MyModel(applicationModel).allData}" /> + </js:Container> +</js:ViewBase> http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9c7e00b1/examples/DataBindingExample/src/README.txt ---------------------------------------------------------------------- diff --git a/examples/DataBindingExample/src/README.txt b/examples/DataBindingExample/src/README.txt new file mode 100644 index 0000000..afe521b --- /dev/null +++ b/examples/DataBindingExample/src/README.txt @@ -0,0 +1,52 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Licensed to the Apache Software Foundation (ASF) under one or more +// contributor license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright ownership. +// The ASF licenses this file to You under the Apache License, Version 2.0 +// (the "License"); you may not use this file except in compliance with +// the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//////////////////////////////////////////////////////////////////////////////// + +DESCRIPTION + +The DataBindingTest example shows a Flex application that can communicate with +a third-party data source (in this case, yahoo.finance) and display the values +returned using data binding. + +This Flex application may be run as a Flash SWF or cross-compiled (using Falcon JX) +into JavaScript and HTML and run without Flash. + +The DataBindingTest example also shows how the model-view-controller (MVC) pattern +can be used to separate the parts of the application. This is facilitated by +the use of FlexJS beads added to the main application that provide the +data connection (via HTTPService) and interacting with the rest of the application +via events. + +COMPONENTS and BEADS + +- Button +- CheckBox +- ComboBox +- Container +- Label +- RadioButton +- TextArea +- TextInput + +- Data binding: the text properties of TextArea and Label are linked with results +from the remote server calls. + +NOTES + +The cross-compilation to JavaScript often results in non-fatal warnings. Some of these warnings +should be addressed in future releases of the Falcon JX compiler. http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9c7e00b1/examples/DataBindingExample/src/StockDataJSONItemConverter.as ---------------------------------------------------------------------- diff --git a/examples/DataBindingExample/src/StockDataJSONItemConverter.as b/examples/DataBindingExample/src/StockDataJSONItemConverter.as new file mode 100644 index 0000000..a39606b --- /dev/null +++ b/examples/DataBindingExample/src/StockDataJSONItemConverter.as @@ -0,0 +1,40 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Licensed to the Apache Software Foundation (ASF) under one or more +// contributor license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright ownership. +// The ASF licenses this file to You under the Apache License, Version 2.0 +// (the "License"); you may not use this file except in compliance with +// the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//////////////////////////////////////////////////////////////////////////////// +package +{ + import org.apache.flex.collections.converters.JSONItemConverter; + + public class StockDataJSONItemConverter extends JSONItemConverter + { + public function StockDataJSONItemConverter() + { + super(); + } + + override public function convertItem(data:String):Object + { + var obj:Object = super.convertItem(data); + if (obj["query"]["count"] == 0) + return "No Data"; + + obj = obj["query"]["results"]["quote"]; + return obj; + } + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9c7e00b1/examples/DataBindingExample/src/controllers/MyController.as ---------------------------------------------------------------------- diff --git a/examples/DataBindingExample/src/controllers/MyController.as b/examples/DataBindingExample/src/controllers/MyController.as new file mode 100644 index 0000000..83c2cd5 --- /dev/null +++ b/examples/DataBindingExample/src/controllers/MyController.as @@ -0,0 +1,81 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Licensed to the Apache Software Foundation (ASF) under one or more +// contributor license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright ownership. +// The ASF licenses this file to You under the Apache License, Version 2.0 +// (the "License"); you may not use this file except in compliance with +// the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//////////////////////////////////////////////////////////////////////////////// +package controllers +{ + import org.apache.flex.events.Event; + + import org.apache.flex.core.Application; + import org.apache.flex.core.IDocument; + + import models.MyModel; + + public class MyController implements IDocument + { + public function MyController(app:Application = null) + { + if (app) + { + this.app = app as DataBindingTest; + app.addEventListener("viewChanged", viewChangeHandler); + } + } + + private var queryBegin:String = "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(%22"; + private var queryEnd:String = "%22)%0A%09%09&env=http%3A%2F%2Fdatatables.org%2Falltables.env&format=json"; + private var app:DataBindingTest; + + private function viewChangeHandler(event:Event):void + { + app.initialView.addEventListener("buttonClicked", buttonClickHandler); + app.initialView.addEventListener("radioClicked", radioClickHandler); + app.initialView.addEventListener("listChanged", listChangedHandler); + } + + private function buttonClickHandler(event:Event):void + { + var sym:String = MyInitialView(app.initialView).symbol; + app.service.url = queryBegin + sym + queryEnd; + app.service.send(); + app.service.addEventListener("complete", completeHandler); + } + + private function radioClickHandler(event:Event):void + { + var field:String = MyInitialView(app.initialView).requestedField; + MyModel(app.model).requestedField = field; + } + + private function completeHandler(event:Event):void + { + MyModel(app.model).responseData = app.collection.getItemAt(0); + } + + private function listChangedHandler(event:Event):void + { + MyModel(app.model).stockSymbol = MyInitialView(app.initialView).symbol; + } + + public function setDocument(document:Object, id:String = null):void + { + this.app = document as DataBindingTest; + app.addEventListener("viewChanged", viewChangeHandler); + } + + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9c7e00b1/examples/DataBindingExample/src/models/MyModel.as ---------------------------------------------------------------------- diff --git a/examples/DataBindingExample/src/models/MyModel.as b/examples/DataBindingExample/src/models/MyModel.as new file mode 100644 index 0000000..5a16d02 --- /dev/null +++ b/examples/DataBindingExample/src/models/MyModel.as @@ -0,0 +1,125 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Licensed to the Apache Software Foundation (ASF) under one or more +// contributor license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright ownership. +// The ASF licenses this file to You under the Apache License, Version 2.0 +// (the "License"); you may not use this file except in compliance with +// the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//////////////////////////////////////////////////////////////////////////////// +package models +{ + import org.apache.flex.events.Event; + import org.apache.flex.events.EventDispatcher; + + public class MyModel extends EventDispatcher + { + public function MyModel() + { + } + + private var _requestedField:String = "Ask"; + + [Bindable("requestedFieldChanged")] + public function get requestedField():String + { + return _requestedField; + } + + public function set requestedField(value:String):void + { + if (value != _requestedField) + { + _requestedField = value; + dispatchEvent(new Event("requestedFieldChanged")); + if (_responseData) + dispatchEvent(new Event("responseTextChanged")); + } + } + + [Bindable("responseTextChanged")] + public function get responseText():String + { + if (_responseData == null) + return ""; + if (_responseData == "No Data") + return _responseData as String; + var s:String = _responseData[_requestedField]; + if (s == null) + { + if (_requestedField == "Ask") + s = _responseData["Bid"]; + } + return s; + } + + private var _responseData:Object; + + [Bindable("responseDataChanged")] + public function get responseData():Object + { + return _responseData; + } + + public function set responseData(value:Object):void + { + if (value != _responseData) + { + _responseData = value; + _allData = ""; + dispatchEvent(new Event("responseDataChanged")); + dispatchEvent(new Event("responseTextChanged")); + } + } + + private var _allData:String = ""; + + [Bindable("responseDataChanged")] + public function get allData():String + { + if (_allData == "" && _responseData != null) + { + for (var p:String in _responseData) + { + _allData += p + ": " + _responseData[p] + "\n"; + } + } + return _allData; + } + + + private var _stockSymbol:String; + + [Bindable("stockSymbolChanged")] + public function get stockSymbol():String + { + return _stockSymbol; + } + + public function set stockSymbol(value:String):void + { + if (value != _stockSymbol) + { + _stockSymbol = value; + dispatchEvent(new Event("stockSymbolChanged")); + } + } + + private var _strings:Array = ["AAPL", "ADBE", "GOOG", "MSFT", "YHOO"]; + [Bindable("__NoChangeEvent__")] + public function get strings():Array + { + return _strings; + } + + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9c7e00b1/examples/DataBindingExample_Flat/build.xml ---------------------------------------------------------------------- diff --git a/examples/DataBindingExample_Flat/build.xml b/examples/DataBindingExample_Flat/build.xml new file mode 100644 index 0000000..ab55f2f --- /dev/null +++ b/examples/DataBindingExample_Flat/build.xml @@ -0,0 +1,48 @@ +<?xml version="1.0"?> +<!-- + + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +--> + + +<project name="databindingtest_flat" default="main" basedir="."> + <property name="FLEXJS_HOME" location="../.."/> + <property name="example" value="DataBindingTest" /> + <property name="theme_arg" value="-theme=${FLEXJS_HOME}/frameworks/libs/Flat.swc" /> + + <property file="${FLEXJS_HOME}/env.properties"/> + <property environment="env"/> + <property file="${FLEXJS_HOME}/build.properties"/> + <property name="FLEX_HOME" value="${FLEXJS_HOME}"/> + <property name="FALCON_HOME" value="${env.FALCON_HOME}"/> + <property name="FALCONJX_HOME" value="${env.FALCONJX_HOME}"/> + <property name="GOOG_HOME" value="${env.GOOG_HOME}"/> + + <include file="${basedir}/../build_example.xml" /> + + <target name="main" depends="clean,build_example.compile,build_example.compilejs" description="Clean build of ${example}"> + </target> + + <target name="clean"> + <delete dir="${basedir}/bin" failonerror="false" /> + <delete dir="${basedir}/bin-debug" failonerror="false" /> + <delete dir="${basedir}/bin-release" failonerror="false" /> + </target> + + + +</project> http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9c7e00b1/examples/DataBindingExample_Flat/src/DataBindingTest.mxml ---------------------------------------------------------------------- diff --git a/examples/DataBindingExample_Flat/src/DataBindingTest.mxml b/examples/DataBindingExample_Flat/src/DataBindingTest.mxml new file mode 100644 index 0000000..751e427 --- /dev/null +++ b/examples/DataBindingExample_Flat/src/DataBindingTest.mxml @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +--> +<js:Application xmlns:fx="http://ns.adobe.com/mxml/2009" + xmlns:local="*" + xmlns:js="library://ns.apache.org/flexjs/basic" + xmlns:models="models.*" + xmlns:controllers="controllers.*" + initialize="MyModel(model).stockSymbol='ADBE'" + > + <js:valuesImpl> + <js:SimpleCSSValuesImpl /> + </js:valuesImpl> + <js:initialView> + <local:MyInitialView /> + </js:initialView> + <js:model> + <models:MyModel /> + </js:model> + <js:controller> + <controllers:MyController /> + </js:controller> + <js:beads> + <js:HTTPService id="service"> + <js:LazyCollection id="collection"> + <js:inputParser> + <js:JSONInputParser /> + </js:inputParser> + <js:itemConverter> + <local:StockDataJSONItemConverter /> + </js:itemConverter> + </js:LazyCollection> + </js:HTTPService> + <js:CSSFontFaceBead /> + <js:ViewSourceContextMenuOption /> + </js:beads> +</js:Application> http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9c7e00b1/examples/DataBindingExample_Flat/src/MyInitialView.mxml ---------------------------------------------------------------------- diff --git a/examples/DataBindingExample_Flat/src/MyInitialView.mxml b/examples/DataBindingExample_Flat/src/MyInitialView.mxml new file mode 100644 index 0000000..b153ba5 --- /dev/null +++ b/examples/DataBindingExample_Flat/src/MyInitialView.mxml @@ -0,0 +1,144 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +--> +<js:ViewBase xmlns:fx="http://ns.adobe.com/mxml/2009" + xmlns:js="library://ns.apache.org/flexjs/flat" + initComplete="initControls()"> + <fx:Script> + <![CDATA[ + import models.MyModel; + + import org.apache.flex.events.CustomEvent; + + private var _symbol:String; + + public function get symbol():String + { + return _symbol; + } + + public function get requestedField():String + { + return radio1.selectedValue as String; + } + + [Bindable] + public var fieldText:String; + + private function radioChanged(e:org.apache.flex.events.Event):void + { + dispatchEvent(new CustomEvent("radioClicked")); + fieldText = RadioButton(e.target).text; + } + + private function initControls():void + { + list.selectedItem = MyModel(applicationModel).stockSymbol; + radio1.selectedValue = MyModel(applicationModel).requestedField; + if (radio1.selected) + fieldText = radio1.text; + else if (radio2.selected) + fieldText = radio2.text; + else if (radio3.selected) + fieldText = radio3.text; + else if (radio4.selected) + fieldText = radio4.text; + + } + + private function setState():void + { + currentState = showAllData.selected ? "showAll" : "hideAll"; + } + ]]> + </fx:Script> + <fx:Style> + @namespace basic "library://ns.apache.org/flexjs/basic"; + + .output { + font-size: 20px; + } + + .topContainer { + padding: 10px; + + } + .leftSide { + vertical-align: top; + margin-right: 10px; + } + + .rightSide { + vertical-align: top; + margin-left: 10px; + padding-left: 10px; + } + + .quoteButton { + margin-top: 10px; + margin-bottom: 10px; + } + </fx:Style> + <js:states> + <js:State name="hideAll" /> + <js:State name="showAll" /> + </js:states> + <js:beads> + <js:ViewBaseDataBinding /> + </js:beads> + <js:Container x="0" y="0" className="topContainer" > + <js:beads> + <js:VerticalLayout /> + </js:beads> + <js:Label width="300" text="Enter Stock Symbol or choose from list:" /> + <js:Container> + <js:beads> + <js:HorizontalLayout /> + </js:beads> + <js:Container className="leftSide"> + <js:beads> + <js:VerticalLayout /> + </js:beads> + <js:TextInput id="symbolTI" text="{MyModel(applicationModel).stockSymbol}" /> + <js:TextButton text="Get Quote" className="quoteButton" + click="_symbol = symbolTI.text; dispatchEvent(new CustomEvent('buttonClicked'))" /> + <js:Label id="field" text="{fieldText}"/> + <js:Label className="output" height="24" text="{MyModel(applicationModel).responseText}" /> + </js:Container> + <js:Container className="rightSide"> + <js:beads> + <js:VerticalLayout /> + </js:beads> + <js:DropDownList id="list" width="100" + change="_symbol = list.selectedItem as String; dispatchEvent(new CustomEvent('listChanged'))" + dataProvider="{MyModel(applicationModel).strings}" /> + <js:RadioButton id="radio1" text="Price" value="Ask" groupName="group1" change="radioChanged(event)"/> + <js:RadioButton id="radio2" text="Change" value="Change" groupName="group1" change="radioChanged(event)"/> + <js:RadioButton id="radio3" text="Day's High" value="DaysHigh" groupName="group1" change="radioChanged(event)"/> + <js:RadioButton id="radio4" text="Day's Low" value="DaysLow" groupName="group1" change="radioChanged(event)"/> + <js:CheckBox id="showAllData" text="Show All Data" change="setState()" /> + </js:Container> + </js:Container> + <js:Label id="bindtest" text="{fieldText + ' expression binding'}" /> + <js:Label width="300" text.showAll="110" includeIn="showAll" /> + <js:TextArea id="ta" width="300" height="100" height.showAll="110" + includeIn="showAll" + text="{MyModel(applicationModel).allData}" /> + </js:Container> +</js:ViewBase> http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9c7e00b1/examples/DataBindingExample_Flat/src/README.txt ---------------------------------------------------------------------- diff --git a/examples/DataBindingExample_Flat/src/README.txt b/examples/DataBindingExample_Flat/src/README.txt new file mode 100644 index 0000000..afe521b --- /dev/null +++ b/examples/DataBindingExample_Flat/src/README.txt @@ -0,0 +1,52 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Licensed to the Apache Software Foundation (ASF) under one or more +// contributor license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright ownership. +// The ASF licenses this file to You under the Apache License, Version 2.0 +// (the "License"); you may not use this file except in compliance with +// the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//////////////////////////////////////////////////////////////////////////////// + +DESCRIPTION + +The DataBindingTest example shows a Flex application that can communicate with +a third-party data source (in this case, yahoo.finance) and display the values +returned using data binding. + +This Flex application may be run as a Flash SWF or cross-compiled (using Falcon JX) +into JavaScript and HTML and run without Flash. + +The DataBindingTest example also shows how the model-view-controller (MVC) pattern +can be used to separate the parts of the application. This is facilitated by +the use of FlexJS beads added to the main application that provide the +data connection (via HTTPService) and interacting with the rest of the application +via events. + +COMPONENTS and BEADS + +- Button +- CheckBox +- ComboBox +- Container +- Label +- RadioButton +- TextArea +- TextInput + +- Data binding: the text properties of TextArea and Label are linked with results +from the remote server calls. + +NOTES + +The cross-compilation to JavaScript often results in non-fatal warnings. Some of these warnings +should be addressed in future releases of the Falcon JX compiler. http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9c7e00b1/examples/DataBindingExample_Flat/src/StockDataJSONItemConverter.as ---------------------------------------------------------------------- diff --git a/examples/DataBindingExample_Flat/src/StockDataJSONItemConverter.as b/examples/DataBindingExample_Flat/src/StockDataJSONItemConverter.as new file mode 100644 index 0000000..a39606b --- /dev/null +++ b/examples/DataBindingExample_Flat/src/StockDataJSONItemConverter.as @@ -0,0 +1,40 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Licensed to the Apache Software Foundation (ASF) under one or more +// contributor license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright ownership. +// The ASF licenses this file to You under the Apache License, Version 2.0 +// (the "License"); you may not use this file except in compliance with +// the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//////////////////////////////////////////////////////////////////////////////// +package +{ + import org.apache.flex.collections.converters.JSONItemConverter; + + public class StockDataJSONItemConverter extends JSONItemConverter + { + public function StockDataJSONItemConverter() + { + super(); + } + + override public function convertItem(data:String):Object + { + var obj:Object = super.convertItem(data); + if (obj["query"]["count"] == 0) + return "No Data"; + + obj = obj["query"]["results"]["quote"]; + return obj; + } + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9c7e00b1/examples/DataBindingExample_Flat/src/controllers/MyController.as ---------------------------------------------------------------------- diff --git a/examples/DataBindingExample_Flat/src/controllers/MyController.as b/examples/DataBindingExample_Flat/src/controllers/MyController.as new file mode 100644 index 0000000..83c2cd5 --- /dev/null +++ b/examples/DataBindingExample_Flat/src/controllers/MyController.as @@ -0,0 +1,81 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Licensed to the Apache Software Foundation (ASF) under one or more +// contributor license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright ownership. +// The ASF licenses this file to You under the Apache License, Version 2.0 +// (the "License"); you may not use this file except in compliance with +// the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//////////////////////////////////////////////////////////////////////////////// +package controllers +{ + import org.apache.flex.events.Event; + + import org.apache.flex.core.Application; + import org.apache.flex.core.IDocument; + + import models.MyModel; + + public class MyController implements IDocument + { + public function MyController(app:Application = null) + { + if (app) + { + this.app = app as DataBindingTest; + app.addEventListener("viewChanged", viewChangeHandler); + } + } + + private var queryBegin:String = "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(%22"; + private var queryEnd:String = "%22)%0A%09%09&env=http%3A%2F%2Fdatatables.org%2Falltables.env&format=json"; + private var app:DataBindingTest; + + private function viewChangeHandler(event:Event):void + { + app.initialView.addEventListener("buttonClicked", buttonClickHandler); + app.initialView.addEventListener("radioClicked", radioClickHandler); + app.initialView.addEventListener("listChanged", listChangedHandler); + } + + private function buttonClickHandler(event:Event):void + { + var sym:String = MyInitialView(app.initialView).symbol; + app.service.url = queryBegin + sym + queryEnd; + app.service.send(); + app.service.addEventListener("complete", completeHandler); + } + + private function radioClickHandler(event:Event):void + { + var field:String = MyInitialView(app.initialView).requestedField; + MyModel(app.model).requestedField = field; + } + + private function completeHandler(event:Event):void + { + MyModel(app.model).responseData = app.collection.getItemAt(0); + } + + private function listChangedHandler(event:Event):void + { + MyModel(app.model).stockSymbol = MyInitialView(app.initialView).symbol; + } + + public function setDocument(document:Object, id:String = null):void + { + this.app = document as DataBindingTest; + app.addEventListener("viewChanged", viewChangeHandler); + } + + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9c7e00b1/examples/DataBindingExample_Flat/src/models/MyModel.as ---------------------------------------------------------------------- diff --git a/examples/DataBindingExample_Flat/src/models/MyModel.as b/examples/DataBindingExample_Flat/src/models/MyModel.as new file mode 100644 index 0000000..5a16d02 --- /dev/null +++ b/examples/DataBindingExample_Flat/src/models/MyModel.as @@ -0,0 +1,125 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Licensed to the Apache Software Foundation (ASF) under one or more +// contributor license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright ownership. +// The ASF licenses this file to You under the Apache License, Version 2.0 +// (the "License"); you may not use this file except in compliance with +// the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//////////////////////////////////////////////////////////////////////////////// +package models +{ + import org.apache.flex.events.Event; + import org.apache.flex.events.EventDispatcher; + + public class MyModel extends EventDispatcher + { + public function MyModel() + { + } + + private var _requestedField:String = "Ask"; + + [Bindable("requestedFieldChanged")] + public function get requestedField():String + { + return _requestedField; + } + + public function set requestedField(value:String):void + { + if (value != _requestedField) + { + _requestedField = value; + dispatchEvent(new Event("requestedFieldChanged")); + if (_responseData) + dispatchEvent(new Event("responseTextChanged")); + } + } + + [Bindable("responseTextChanged")] + public function get responseText():String + { + if (_responseData == null) + return ""; + if (_responseData == "No Data") + return _responseData as String; + var s:String = _responseData[_requestedField]; + if (s == null) + { + if (_requestedField == "Ask") + s = _responseData["Bid"]; + } + return s; + } + + private var _responseData:Object; + + [Bindable("responseDataChanged")] + public function get responseData():Object + { + return _responseData; + } + + public function set responseData(value:Object):void + { + if (value != _responseData) + { + _responseData = value; + _allData = ""; + dispatchEvent(new Event("responseDataChanged")); + dispatchEvent(new Event("responseTextChanged")); + } + } + + private var _allData:String = ""; + + [Bindable("responseDataChanged")] + public function get allData():String + { + if (_allData == "" && _responseData != null) + { + for (var p:String in _responseData) + { + _allData += p + ": " + _responseData[p] + "\n"; + } + } + return _allData; + } + + + private var _stockSymbol:String; + + [Bindable("stockSymbolChanged")] + public function get stockSymbol():String + { + return _stockSymbol; + } + + public function set stockSymbol(value:String):void + { + if (value != _stockSymbol) + { + _stockSymbol = value; + dispatchEvent(new Event("stockSymbolChanged")); + } + } + + private var _strings:Array = ["AAPL", "ADBE", "GOOG", "MSFT", "YHOO"]; + [Bindable("__NoChangeEvent__")] + public function get strings():Array + { + return _strings; + } + + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9c7e00b1/examples/DataBindingExample_as/build.xml ---------------------------------------------------------------------- diff --git a/examples/DataBindingExample_as/build.xml b/examples/DataBindingExample_as/build.xml new file mode 100644 index 0000000..3a04dfa --- /dev/null +++ b/examples/DataBindingExample_as/build.xml @@ -0,0 +1,47 @@ +<?xml version="1.0"?> +<!-- + + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +--> + + +<project name="databindingtest_as" default="main" basedir="."> + <property name="FLEXJS_HOME" location="../.."/> + <property name="example" value="DataBindingTest" /> + + <property file="${FLEXJS_HOME}/env.properties"/> + <property environment="env"/> + <property file="${FLEXJS_HOME}/build.properties"/> + <property name="FLEX_HOME" value="${FLEXJS_HOME}"/> + <property name="FALCON_HOME" value="${env.FALCON_HOME}"/> + <property name="FALCONJX_HOME" value="${env.FALCONJX_HOME}"/> + <property name="GOOG_HOME" value="${env.GOOG_HOME}"/> + + <include file="${basedir}/../build_example.xml" /> + + <target name="main" depends="clean,build_example.compileas,build_example.compileasjs" description="Clean build of ${example}"> + </target> + + <target name="clean"> + <delete dir="${basedir}/bin" failonerror="false" /> + <delete dir="${basedir}/bin-debug" failonerror="false" /> + <delete dir="${basedir}/bin-release" failonerror="false" /> + </target> + + + +</project> http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9c7e00b1/examples/DataBindingExample_as/src/DataBindingTest.as ---------------------------------------------------------------------- diff --git a/examples/DataBindingExample_as/src/DataBindingTest.as b/examples/DataBindingExample_as/src/DataBindingTest.as new file mode 100644 index 0000000..56d1a0e --- /dev/null +++ b/examples/DataBindingExample_as/src/DataBindingTest.as @@ -0,0 +1,257 @@ +/** + +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +*/ +package +{ + +import org.apache.flex.core.Application; +import org.apache.flex.core.ItemRendererClassFactory; +import org.apache.flex.core.SimpleCSSValuesImpl; +import org.apache.flex.events.Event; +import org.apache.flex.html.beads.CSSButtonView; +import org.apache.flex.html.beads.CSSTextButtonView; +import org.apache.flex.html.beads.CheckBoxView; +import org.apache.flex.html.beads.ContainerView; +import org.apache.flex.html.beads.DataItemRendererFactoryForArrayData; +import org.apache.flex.html.beads.DropDownListView; +import org.apache.flex.html.beads.ListView; +import org.apache.flex.html.beads.RadioButtonView; +import org.apache.flex.html.beads.SingleLineBorderBead; +import org.apache.flex.html.beads.SolidBackgroundBead; +import org.apache.flex.html.beads.TextAreaView; +import org.apache.flex.html.beads.TextButtonMeasurementBead; +import org.apache.flex.html.beads.TextFieldLabelMeasurementBead; +import org.apache.flex.html.beads.TextFieldView; +import org.apache.flex.html.beads.TextInputWithBorderView; +import org.apache.flex.html.beads.TextItemRendererFactoryForArrayData; +import org.apache.flex.html.beads.controllers.DropDownListController; +import org.apache.flex.html.beads.controllers.ItemRendererMouseController; +import org.apache.flex.html.beads.controllers.EditableTextKeyboardController; +import org.apache.flex.html.beads.controllers.ListSingleSelectionMouseController; +import org.apache.flex.html.beads.layouts.VerticalScrollingLayout; +import org.apache.flex.html.beads.models.ArraySelectionModel; +import org.apache.flex.html.beads.models.SingleLineBorderModel; +import org.apache.flex.html.beads.models.TextModel; +import org.apache.flex.html.beads.models.ToggleButtonModel; +import org.apache.flex.html.beads.models.ValueToggleButtonModel; +import org.apache.flex.html.supportClasses.DropDownListList; +import org.apache.flex.html.supportClasses.DataGroup; +import org.apache.flex.html.supportClasses.StringItemRenderer; +import org.apache.flex.net.HTTPService; +import org.apache.flex.collections.parsers.JSONInputParser; +import org.apache.flex.collections.LazyCollection; +import org.apache.flex.utils.ViewSourceContextMenuOption; + +import models.MyModel; +import controllers.MyController; + +public class DataBindingTest extends Application +{ + + public function DataBindingTest() + { + addEventListener("initialize", initializeHandler); + var vi:SimpleCSSValuesImpl = new SimpleCSSValuesImpl(); + setupStyles(vi); + valuesImpl = vi; + initialView = new MyInitialView(); + model = new MyModel(); + controller = new MyController(this); + service = new HTTPService(); + collection = new LazyCollection(); + collection.inputParser = new JSONInputParser(); + collection.itemConverter = new StockDataJSONItemConverter(); + service.addBead(collection); + addBead(service); + addBead(new ViewSourceContextMenuOption()); + } + + public var service:HTTPService; + public var collection:LazyCollection; + + private function initializeHandler(event:Event):void + { + MyModel(model).stockSymbol="ADBE"; + } + + private function setupStyles(vi:SimpleCSSValuesImpl):void + { + var viv:Object = vi.values = {}; + viv["global"] = + { + fontFamily: "Arial", + fontSize: 12 + }; + + var o:Object; + + o = viv[makeDefinitionName("org.apache.flex.html::Container")] = + { + + iBeadView: ContainerView + }; + + CONFIG::as_only { + o.iBackgroundBead = SolidBackgroundBead; + o.iBorderBead = SingleLineBorderBead; + } + + viv[makeDefinitionName("org.apache.flex.html::List")] = + { + iBeadModel: ArraySelectionModel, + iBeadView: ListView, + iBeadController: ListSingleSelectionMouseController, + iBeadLayout: VerticalScrollingLayout, + iDataGroup: DataGroup, + iDataProviderItemRendererMapper: DataItemRendererFactoryForArrayData, + iItemRendererClassFactory: ItemRendererClassFactory, + iItemRenderer: StringItemRenderer + }; + + o = viv[makeDefinitionName("org.apache.flex.html::Button")] = + { + backgroundColor: 0xd8d8d8, + border: [1, "solid", 0x000000], + padding: 4 + }; + CONFIG::as_only { + o.iBeadView = CSSButtonView; + } + + viv[makeDefinitionName("org.apache.flex.html::Button:hover")] = + { + backgroundColor: 0x9fa0a1, + border: [1, "solid", 0x000000], + padding: 4 + }; + + viv[makeDefinitionName("org.apache.flex.html::Button:active")] = + { + backgroundColor: 0x929496, + border: [1, "solid", 0x000000], + padding: 4 + }; + + CONFIG::as_only { + viv["org.apache.flex.html::CheckBox"] = + { + iBeadModel: ToggleButtonModel, + iBeadView: CheckBoxView + }; + + viv["org.apache.flex.html::DropDownList"] = + { + iBeadModel: ArraySelectionModel, + iBeadView: DropDownListView, + iBeadController: DropDownListController, + iPopUp: DropDownListList + }; + + viv["org.apache.flex.html.supportClasses::DropDownListList"] = + { + iBeadModel: ArraySelectionModel, + iDataProviderItemRendererMapper: TextItemRendererFactoryForArrayData, + iItemRendererClassFactory: ItemRendererClassFactory, + iItemRenderer: StringItemRenderer + }; + + viv["org.apache.flex.html::Label"] = + { + iBeadModel: TextModel, + iBeadView: TextFieldView, + iMeasurementBead: TextFieldLabelMeasurementBead + }; + + viv["org.apache.flex.html::List"] = + { + iBorderBead: SingleLineBorderBead, + iBorderModel: SingleLineBorderModel + }; + + viv["org.apache.flex.html::RadioButton"] = + { + iBeadModel: ValueToggleButtonModel, + iBeadView: RadioButtonView + }; + + viv["org.apache.flex.html::TextArea"] = + { + iBeadModel: TextModel, + iBeadView: TextAreaView, + iBeadController: EditableTextKeyboardController, + iBorderBead: SingleLineBorderBead, + iBorderModel: SingleLineBorderModel, + width: 135, + height: 20 + }; + + viv["org.apache.flex.html::TextButton"] = + { + iBeadModel: TextModel, + iBeadView: CSSTextButtonView, + iMeasurementBead: TextButtonMeasurementBead + }; + + viv["org.apache.flex.html::TextInput"] = + { + iBeadModel: TextModel, + iBeadView: TextInputWithBorderView, + iBeadController: EditableTextKeyboardController, + iBorderBead: SingleLineBorderBead, + iBorderModel: SingleLineBorderModel, + width: 135, + height: 20 + }; + + viv["org.apache.flex.html::ToggleTextButton"] = + { + iBeadModel: ToggleButtonModel, + iBeadView: CSSTextButtonView + }; + + viv["org.apache.flex.html::SimpleList"] = + { + iBeadModel: ArraySelectionModel, + iBeadView: ListView, + iBeadController: ListSingleSelectionMouseController, + iBeadLayout: VerticalScrollingLayout, + iDataGroup: DataGroup, + iDataProviderItemRendererMapper: TextItemRendererFactoryForArrayData, + iItemRendererClassFactory: ItemRendererClassFactory, + iItemRenderer: StringItemRenderer + } + + viv["org.apache.flex.html.supportClasses::StringItemRenderer"] = + { + iBeadController: ItemRendererMouseController, + height: 16 + } + } + } + + private function makeDefinitionName(s:String):String + { + CONFIG::js_only { + s = s.replace(/\./g, "_"); + s = s.replace("::", "_"); + } + return s; + } +} + +} http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9c7e00b1/examples/DataBindingExample_as/src/MyInitialView.as ---------------------------------------------------------------------- diff --git a/examples/DataBindingExample_as/src/MyInitialView.as b/examples/DataBindingExample_as/src/MyInitialView.as new file mode 100644 index 0000000..1c31b58 --- /dev/null +++ b/examples/DataBindingExample_as/src/MyInitialView.as @@ -0,0 +1,283 @@ +/** + +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +*/ +package +{ + +//import mx.states.State; + +import models.MyModel; + +import org.apache.flex.binding.ConstantBinding; +import org.apache.flex.binding.SimpleBinding; +import org.apache.flex.core.SimpleCSSValuesImpl; +import org.apache.flex.core.ValuesManager; +import org.apache.flex.core.ViewBase; +import org.apache.flex.events.CustomEvent; +import org.apache.flex.events.Event; +import org.apache.flex.html.CheckBox; +import org.apache.flex.html.Container; +import org.apache.flex.html.DropDownList; +import org.apache.flex.html.Label; +import org.apache.flex.html.RadioButton; +import org.apache.flex.html.TextArea; +import org.apache.flex.html.TextButton; +import org.apache.flex.html.TextInput; +import org.apache.flex.html.beads.layouts.HorizontalLayout; +import org.apache.flex.html.beads.layouts.VerticalLayout; + +public class MyInitialView extends ViewBase +{ + + public function MyInitialView() + { + addEventListener("initComplete", initCompleteHandler); + /* + var statesArray = []; + var state:State = new mx.states.State(); + state.name = "hideAll"; + statesArray.push(state); + state = new mx.states.State(); + state.name = "showAll"; + statesArray.push(state); + states = statesArray; + */ + var vi:SimpleCSSValuesImpl = ValuesManager.valuesImpl as SimpleCSSValuesImpl; + var viv:Object = vi.values; + viv[".output"]= { + fontSize: 20 + }; + + viv[".topContainer"] = { + padding: 10 + }; + + viv[".leftSide"] = { + verticalAlign: "top", + marginRight: 10 + } + + viv[".rightSide"] = { + verticalAlign: "top", + marginLeft: 10, + paddingLeft: 10 + } + + viv[".quoteButton"] = { + marginTop: 10, + marginBottom: 10 + } + + } + + private function initCompleteHandler(event:Event):void + { + initControls(); + } + + private var _symbol:String; + + public function get symbol():String + { + return _symbol; + } + + public function get requestedField():String + { + return radio1.selectedValue as String; + } + + [Bindable] + public var fieldText:String; + + private function radioChanged(e:org.apache.flex.events.Event):void + { + dispatchEvent(new CustomEvent("radioClicked")); + fieldText = RadioButton(e.target).text; + } + + private function initControls():void + { + list.selectedItem = MyModel(applicationModel).stockSymbol; + radio1.selectedValue = MyModel(applicationModel).requestedField; + if (radio1.selected) + fieldText = radio1.text; + else if (radio2.selected) + fieldText = radio2.text; + else if (radio3.selected) + fieldText = radio3.text; + else if (radio4.selected) + fieldText = radio4.text; + + } + + private function setState():void + { + currentState = showAllData.selected ? "showAll" : "hideAll"; + } + + override public function get MXMLDescriptor():Array + { + var c:Container = new Container(); + c.x = 0; + c.y = 0; + c.className = "topContainer"; + c.addBead(new VerticalLayout()); + addElement(c); + var l:Label = new Label(); + l.width = 300; + l.text = "Enter Stock Symbol or choose from list:"; + c.addElement(l); + var c2:Container = new Container(); + c2.addBead(new HorizontalLayout()); + c.addElement(c2); + var c3:Container = new Container(); + c3.className = "leftSide"; + c3.addBead(new VerticalLayout()); + c2.addElement(c3); + symbolTI = new TextInput(); + var sb:SimpleBinding = new SimpleBinding(); + sb.sourceID = "applicationModel"; + sb.sourcePropertyName = "stockSymbol"; + sb.eventName = "stockSymbolChanged"; + sb.destination = symbolTI; + sb.destinationPropertyName = "text"; + sb.setDocument(this); + addBead(sb); + c3.addElement(symbolTI); + var tb:TextButton = new TextButton(); + tb.text = "Get Quote"; + tb.className = "quoteButton"; + tb.addEventListener("click", tb_clickHandler); + c3.addElement(tb); + field = new Label(); + sb = new SimpleBinding(); + sb.sourcePropertyName = "fieldText"; + sb.eventName = "valueChange"; + sb.destination = field; + sb.destinationPropertyName = "text"; + sb.setDocument(this); + addBead(sb); + c3.addElement(field); + output = new Label(); + output.className = "output"; + output.height=24; + sb = new SimpleBinding(); + sb.sourceID = "applicationModel"; + sb.sourcePropertyName = "responseText"; + sb.eventName = "responseTextChanged"; + sb.destination = output; + sb.destinationPropertyName = "text"; + sb.setDocument(this); + addBead(sb); + c3.addElement(output); + c3.childrenAdded(); + + c3 = new Container(); + c3.className="rightSide"; + c3.addBead(new VerticalLayout()); + c2.addElement(c3); + list = new DropDownList(); + list.width=100; + list.height=17; + var cb:ConstantBinding = new ConstantBinding(); + cb.sourceID = "applicationModel"; + cb.sourcePropertyName = "strings"; + cb.destination = list; + cb.destinationPropertyName = "dataProvider"; + cb.setDocument(this); + addBead(cb); + list.addEventListener("change", list_changeHandler); + c3.addElement(list); + radio1 = new RadioButton(); + radio1.text = "Price"; + radio1.value = "Ask"; + radio1.groupName = "group1"; + radio1.addEventListener("change", radioChanged); + c3.addElement(radio1); + radio2 = new RadioButton(); + radio2.text = "Change"; + radio2.value = "Change"; + radio2.groupName = "group1"; + radio2.addEventListener("change", radioChanged); + c3.addElement(radio2); + radio3 = new RadioButton(); + radio3.text = "Day's High"; + radio3.value = "DaysHight"; + radio3.groupName = "group1"; + radio3.addEventListener("change", radioChanged); + c3.addElement(radio3); + radio4 = new RadioButton(); + radio4.text = "Day's Low"; + radio4.value = "DaysLow"; + radio4.groupName = "group1"; + radio4.addEventListener("change", radioChanged); + c3.addElement(radio4); + showAllData = new CheckBox(); + showAllData.text = "Show All Data"; + showAllData.addEventListener("change", showAllData_changeHandler); + c3.addElement(showAllData); + c3.childrenAdded(); + ta = new TextArea(); + ta.width = 300; + ta.height = 100; + sb = new SimpleBinding(); + sb.sourceID = "applicationModel"; + sb.sourcePropertyName = "allData"; + sb.eventName = "responseDataChanged"; + sb.destination = ta; + sb.destinationPropertyName = "text"; + sb.setDocument(this); + addBead(sb); + c.addElement(ta); + c2.childrenAdded(); + c.childrenAdded(); + + return super.MXMLDescriptor; + + } + + public var symbolTI:TextInput; + public var output:Label; + public var field:Label; + public var list:DropDownList; + public var radio1:RadioButton; + public var radio2:RadioButton; + public var radio3:RadioButton; + public var radio4:RadioButton; + public var showAllData:CheckBox; + public var ta:TextArea; + + private function tb_clickHandler(event:Event):void + { + _symbol = symbolTI.text; + dispatchEvent(new CustomEvent('buttonClicked')); + } + + private function list_changeHandler(event:Event):void + { + _symbol = list.selectedItem as String; + dispatchEvent(new CustomEvent('listChanged')); + } + + private function showAllData_changeHandler(event:Event):void + { + setState(); + } +} +} http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9c7e00b1/examples/DataBindingExample_as/src/StockDataJSONItemConverter.as ---------------------------------------------------------------------- diff --git a/examples/DataBindingExample_as/src/StockDataJSONItemConverter.as b/examples/DataBindingExample_as/src/StockDataJSONItemConverter.as new file mode 100644 index 0000000..a39606b --- /dev/null +++ b/examples/DataBindingExample_as/src/StockDataJSONItemConverter.as @@ -0,0 +1,40 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Licensed to the Apache Software Foundation (ASF) under one or more +// contributor license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright ownership. +// The ASF licenses this file to You under the Apache License, Version 2.0 +// (the "License"); you may not use this file except in compliance with +// the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//////////////////////////////////////////////////////////////////////////////// +package +{ + import org.apache.flex.collections.converters.JSONItemConverter; + + public class StockDataJSONItemConverter extends JSONItemConverter + { + public function StockDataJSONItemConverter() + { + super(); + } + + override public function convertItem(data:String):Object + { + var obj:Object = super.convertItem(data); + if (obj["query"]["count"] == 0) + return "No Data"; + + obj = obj["query"]["results"]["quote"]; + return obj; + } + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9c7e00b1/examples/DataBindingExample_as/src/controllers/MyController.as ---------------------------------------------------------------------- diff --git a/examples/DataBindingExample_as/src/controllers/MyController.as b/examples/DataBindingExample_as/src/controllers/MyController.as new file mode 100644 index 0000000..83c2cd5 --- /dev/null +++ b/examples/DataBindingExample_as/src/controllers/MyController.as @@ -0,0 +1,81 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Licensed to the Apache Software Foundation (ASF) under one or more +// contributor license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright ownership. +// The ASF licenses this file to You under the Apache License, Version 2.0 +// (the "License"); you may not use this file except in compliance with +// the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//////////////////////////////////////////////////////////////////////////////// +package controllers +{ + import org.apache.flex.events.Event; + + import org.apache.flex.core.Application; + import org.apache.flex.core.IDocument; + + import models.MyModel; + + public class MyController implements IDocument + { + public function MyController(app:Application = null) + { + if (app) + { + this.app = app as DataBindingTest; + app.addEventListener("viewChanged", viewChangeHandler); + } + } + + private var queryBegin:String = "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(%22"; + private var queryEnd:String = "%22)%0A%09%09&env=http%3A%2F%2Fdatatables.org%2Falltables.env&format=json"; + private var app:DataBindingTest; + + private function viewChangeHandler(event:Event):void + { + app.initialView.addEventListener("buttonClicked", buttonClickHandler); + app.initialView.addEventListener("radioClicked", radioClickHandler); + app.initialView.addEventListener("listChanged", listChangedHandler); + } + + private function buttonClickHandler(event:Event):void + { + var sym:String = MyInitialView(app.initialView).symbol; + app.service.url = queryBegin + sym + queryEnd; + app.service.send(); + app.service.addEventListener("complete", completeHandler); + } + + private function radioClickHandler(event:Event):void + { + var field:String = MyInitialView(app.initialView).requestedField; + MyModel(app.model).requestedField = field; + } + + private function completeHandler(event:Event):void + { + MyModel(app.model).responseData = app.collection.getItemAt(0); + } + + private function listChangedHandler(event:Event):void + { + MyModel(app.model).stockSymbol = MyInitialView(app.initialView).symbol; + } + + public function setDocument(document:Object, id:String = null):void + { + this.app = document as DataBindingTest; + app.addEventListener("viewChanged", viewChangeHandler); + } + + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9c7e00b1/examples/DataBindingExample_as/src/models/MyModel.as ---------------------------------------------------------------------- diff --git a/examples/DataBindingExample_as/src/models/MyModel.as b/examples/DataBindingExample_as/src/models/MyModel.as new file mode 100644 index 0000000..4a17f22 --- /dev/null +++ b/examples/DataBindingExample_as/src/models/MyModel.as @@ -0,0 +1,127 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Licensed to the Apache Software Foundation (ASF) under one or more +// contributor license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright ownership. +// The ASF licenses this file to You under the Apache License, Version 2.0 +// (the "License"); you may not use this file except in compliance with +// the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//////////////////////////////////////////////////////////////////////////////// +package models +{ + import org.apache.flex.events.Event; + import org.apache.flex.events.EventDispatcher; + + public class MyModel extends EventDispatcher + { + public function MyModel() + { + } + + private var _requestedField:String = "Ask"; + + [Bindable("requestedFieldChanged")] + public function get requestedField():String + { + return _requestedField; + } + + public function set requestedField(value:String):void + { + if (value != _requestedField) + { + _requestedField = value; + dispatchEvent(new Event("requestedFieldChanged")); + if (_responseData) + dispatchEvent(new Event("responseTextChanged")); + } + } + + private var _responseText:String; + + [Bindable("responseTextChanged")] + public function get responseText():String + { + if (_responseData == null) + return ""; + if (_responseData == "No Data") + return _responseData as String; + var s:String = _responseData[_requestedField]; + if (s == null) + { + if (_requestedField == "Ask") + s = _responseData["Bid"]; + } + return s; + } + + private var _responseData:Object; + + [Bindable("responseDataChanged")] + public function get responseData():Object + { + return _responseData; + } + + public function set responseData(value:Object):void + { + if (value != _responseData) + { + _responseData = value; + _allData = ""; + dispatchEvent(new Event("responseDataChanged")); + dispatchEvent(new Event("responseTextChanged")); + } + } + + private var _allData:String = ""; + + [Bindable("responseDataChanged")] + public function get allData():String + { + if (_allData == "" && _responseData != null) + { + for (var p:String in _responseData) + { + _allData += p + ": " + _responseData[p] + "\n"; + } + } + return _allData; + } + + + private var _stockSymbol:String; + + [Bindable("stockSymbolChanged")] + public function get stockSymbol():String + { + return _stockSymbol; + } + + public function set stockSymbol(value:String):void + { + if (value != _stockSymbol) + { + _stockSymbol = value; + dispatchEvent(new Event("stockSymbolChanged")); + } + } + + private var _strings:Array = ["AAPL", "ADBE", "GOOG", "MSFT", "YHOO"]; + [Bindable("__NoChangeEvent__")] + public function get strings():Array + { + return _strings; + } + + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9c7e00b1/examples/DataBindingTest/build.xml ---------------------------------------------------------------------- diff --git a/examples/DataBindingTest/build.xml b/examples/DataBindingTest/build.xml deleted file mode 100644 index 9c551dd..0000000 --- a/examples/DataBindingTest/build.xml +++ /dev/null @@ -1,47 +0,0 @@ -<?xml version="1.0"?> -<!-- - - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - ---> - - -<project name="databindingtest" default="main" basedir="."> - <property name="FLEXJS_HOME" location="../.."/> - <property name="example" value="DataBindingTest" /> - - <property file="${FLEXJS_HOME}/env.properties"/> - <property environment="env"/> - <property file="${FLEXJS_HOME}/build.properties"/> - <property name="FLEX_HOME" value="${FLEXJS_HOME}"/> - <property name="FALCON_HOME" value="${env.FALCON_HOME}"/> - <property name="FALCONJX_HOME" value="${env.FALCONJX_HOME}"/> - <property name="GOOG_HOME" value="${env.GOOG_HOME}"/> - - <include file="${basedir}/../build_example.xml" /> - - <target name="main" depends="clean,build_example.compile,build_example.compilejs" description="Clean build of ${example}"> - </target> - - <target name="clean"> - <delete dir="${basedir}/bin" failonerror="false" /> - <delete dir="${basedir}/bin-debug" failonerror="false" /> - <delete dir="${basedir}/bin-release" failonerror="false" /> - </target> - - - -</project> http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9c7e00b1/examples/DataBindingTest/src/DataBindingTest.mxml ---------------------------------------------------------------------- diff --git a/examples/DataBindingTest/src/DataBindingTest.mxml b/examples/DataBindingTest/src/DataBindingTest.mxml deleted file mode 100644 index 751e427..0000000 --- a/examples/DataBindingTest/src/DataBindingTest.mxml +++ /dev/null @@ -1,53 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - -Licensed to the Apache Software Foundation (ASF) under one or more -contributor license agreements. See the NOTICE file distributed with -this work for additional information regarding copyright ownership. -The ASF licenses this file to You under the Apache License, Version 2.0 -(the "License"); you may not use this file except in compliance with -the License. You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - ---> -<js:Application xmlns:fx="http://ns.adobe.com/mxml/2009" - xmlns:local="*" - xmlns:js="library://ns.apache.org/flexjs/basic" - xmlns:models="models.*" - xmlns:controllers="controllers.*" - initialize="MyModel(model).stockSymbol='ADBE'" - > - <js:valuesImpl> - <js:SimpleCSSValuesImpl /> - </js:valuesImpl> - <js:initialView> - <local:MyInitialView /> - </js:initialView> - <js:model> - <models:MyModel /> - </js:model> - <js:controller> - <controllers:MyController /> - </js:controller> - <js:beads> - <js:HTTPService id="service"> - <js:LazyCollection id="collection"> - <js:inputParser> - <js:JSONInputParser /> - </js:inputParser> - <js:itemConverter> - <local:StockDataJSONItemConverter /> - </js:itemConverter> - </js:LazyCollection> - </js:HTTPService> - <js:CSSFontFaceBead /> - <js:ViewSourceContextMenuOption /> - </js:beads> -</js:Application>
