You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by ha...@apache.org on 2022/01/02 13:01:27 UTC

[royale-asjs] branch develop updated: missed lots of models

This is an automated email from the ASF dual-hosted git repository.

harbs pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git


The following commit(s) were added to refs/heads/develop by this push:
     new 12a8294  missed lots of models
12a8294 is described below

commit 12a8294b6691876c26fda451947223a3be7fa068
Author: Harbs <ha...@in-tools.com>
AuthorDate: Sun Jan 2 15:01:13 2022 +0200

    missed lots of models
---
 .../royale/org/apache/royale/html/DataContainer.as |  3 ++-
 .../royale/html/beads/CSSImageAndTextButtonView.as |  3 ++-
 .../apache/royale/html/beads/CSSTextButtonView.as  |  3 ++-
 .../royale/html/beads/CSSTextToggleButtonView.as   |  3 ++-
 .../org/apache/royale/html/beads/CheckBoxView.as   |  3 ++-
 .../apache/royale/html/beads/ColorPickerView.as    |  5 +++--
 .../royale/html/beads/ColorPickerWithEmptyView.as  |  3 ++-
 .../org/apache/royale/html/beads/ComboBoxView.as   |  7 ++++---
 .../html/beads/DataGridColumnChangePropagator.as   | 11 ++++++++---
 .../beads/DataGridColumnForceChangePropagator.as   | 17 ++++++++++++----
 .../apache/royale/html/beads/DataGridLinesBead.as  | 23 +++++++++++++++-------
 .../org/apache/royale/html/beads/DataGridView.as   | 15 ++++++++++----
 .../org/apache/royale/html/beads/DateFieldView.as  | 11 ++++++++---
 .../org/apache/royale/html/beads/ErrorImage.as     |  3 ++-
 .../royale/html/beads/MultiSelectionListView.as    |  5 +++--
 .../apache/royale/html/beads/RadioButtonView.as    |  3 ++-
 .../org/apache/royale/html/beads/ScrollBarView.as  |  3 ++-
 .../apache/royale/html/beads/SimpleAlertView.as    |  3 ++-
 .../org/apache/royale/html/beads/SliderView.as     |  4 +++-
 .../org/apache/royale/html/beads/SpinnerView.as    | 12 ++++++-----
 .../org/apache/royale/html/beads/TextButtonView.as |  3 ++-
 .../apache/royale/html/beads/TextFieldViewBase.as  |  3 ++-
 .../org/apache/royale/html/beads/TreeGridView.as   |  7 +++++--
 .../org/apache/royale/html/beads/VScrollBarView.as |  3 ++-
 .../CascadingMenuSelectionMouseController.as       |  4 +++-
 .../controllers/DateChooserMouseController.as      | 18 ++++++++++++-----
 .../beads/controllers/DateFieldMouseController.as  |  3 ++-
 .../beads/controllers/MenuBarMouseController.as    |  4 +++-
 .../controllers/ScrollBarMouseControllerBase.as    |  3 ++-
 .../royale/html/beads/layouts/ButtonBarLayout.as   |  3 ++-
 .../royale/html/beads/layouts/DataGridLayout.as    |  5 +++--
 .../royale/html/beads/layouts/HScrollBarLayout.as  |  3 ++-
 .../royale/html/beads/layouts/TreeGridLayout.as    |  3 ++-
 .../royale/html/beads/layouts/VScrollBarLayout.as  |  3 ++-
 .../html/supportClasses/AccordionItemRenderer.as   |  7 +++++--
 35 files changed, 146 insertions(+), 66 deletions(-)

diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/DataContainer.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/DataContainer.as
index 7c5f7c2..b759a26 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/DataContainer.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/DataContainer.as
@@ -48,6 +48,7 @@ package org.apache.royale.html
 	import org.apache.royale.html.beads.IListView;
 	import org.apache.royale.core.IListWithPresentationModel;
 	import org.apache.royale.core.IHasLabelField;
+	import org.apache.royale.html.util.getModelByType;
 
 	/**
 	 *  Indicates that the initialization of the list is complete.
@@ -146,7 +147,7 @@ package org.apache.royale.html
 		 */
 		public function get presentationModel():IBead
 		{
-			var presModel:IListPresentationModel = getBeadByType(IListPresentationModel) as IListPresentationModel;
+      var presModel:IListPresentationModel = getModelByType(this,IListPresentationModel) as IListPresentationModel;
 			if (presModel == null) {
 			    presModel = loadBeadFromValuesManager(IListPresentationModel, "iListPresentationModel", this) as IListPresentationModel;
 				if (presModel == null)
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/CSSImageAndTextButtonView.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/CSSImageAndTextButtonView.as
index 85c9ecd..102921d 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/CSSImageAndTextButtonView.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/CSSImageAndTextButtonView.as
@@ -43,6 +43,7 @@ package org.apache.royale.html.beads
 	import org.apache.royale.utils.CSSUtils;
 	import org.apache.royale.utils.SolidBorderUtil;
 	import org.apache.royale.utils.StringTrimmer;
+	import org.apache.royale.html.util.getModelByType;
 
     /**
      *  The CSSTextButtonView class is the default view for
@@ -104,7 +105,7 @@ package org.apache.royale.html.beads
 		override public function set strand(value:IStrand):void
 		{
 			_strand = value;
-			textModel = value.getBeadByType(ImageAndTextModel) as ImageAndTextModel;
+      textModel = getModelByType(_strand,ImageAndTextModel) as ImageAndTextModel;
 			textModel.addEventListener("textChange", textChangeHandler);
 			textModel.addEventListener("htmlChange", htmlChangeHandler);
             textModel.addEventListener("imageChange", imageChangeHandler);
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/CSSTextButtonView.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/CSSTextButtonView.as
index eabb23b..d4af2b5 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/CSSTextButtonView.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/CSSTextButtonView.as
@@ -43,6 +43,7 @@ package org.apache.royale.html.beads
 	import org.apache.royale.utils.CSSUtils;
     import org.apache.royale.utils.SolidBorderUtil;
     import org.apache.royale.utils.StringTrimmer;
+    import org.apache.royale.html.util.getModelByType;
 
     /**
      *  The CSSTextButtonView class is the default view for
@@ -104,7 +105,7 @@ package org.apache.royale.html.beads
 		override public function set strand(value:IStrand):void
 		{
 			_strand = value;
-			textModel = value.getBeadByType(ITextModel) as ITextModel;
+      textModel = getModelByType(value,ITextModel) as ITextModel;
 			textModel.addEventListener("textChange", textChangeHandler);
 			textModel.addEventListener("htmlChange", htmlChangeHandler);
 			shape = new Shape();
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/CSSTextToggleButtonView.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/CSSTextToggleButtonView.as
index 0e49846..363a7ed 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/CSSTextToggleButtonView.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/CSSTextToggleButtonView.as
@@ -26,6 +26,7 @@ package org.apache.royale.html.beads
 	import org.apache.royale.core.IToggleButtonModel;
 	import org.apache.royale.events.Event;
 	import org.apache.royale.events.IEventDispatcher;
+	import org.apache.royale.html.util.getModelByType;
 
     /**
      *  The CSSTextToggleButtonView class is the default view for
@@ -80,7 +81,7 @@ package org.apache.royale.html.beads
 		{
             super.strand = value;
             
-			toggleButtonModel = value.getBeadByType(IToggleButtonModel) as IToggleButtonModel;
+            toggleButtonModel = getModelByType(value,IToggleButtonModel) as IToggleButtonModel;
             toggleButtonModel.addEventListener("selectedChange", selectedChangeHandler);
 		}
 	
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/CheckBoxView.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/CheckBoxView.as
index b0547f4..ad72c71 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/CheckBoxView.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/CheckBoxView.as
@@ -30,6 +30,7 @@ package org.apache.royale.html.beads
 	import org.apache.royale.core.IStrand;
 	import org.apache.royale.core.IToggleButtonModel;
 	import org.apache.royale.events.Event;
+	import org.apache.royale.html.util.getModelByType;
 	
     /**
      *  The CheckBoxView class is the default view for
@@ -109,7 +110,7 @@ package org.apache.royale.html.beads
 		{
 			super.strand = value;
             
-			_toggleButtonModel = value.getBeadByType(IToggleButtonModel) as IToggleButtonModel;
+      _toggleButtonModel = getModelByType(value,IToggleButtonModel) as IToggleButtonModel;
 			_toggleButtonModel.addEventListener("textChange", textChangeHandler);
 			_toggleButtonModel.addEventListener("htmlChange", htmlChangeHandler);
 			_toggleButtonModel.addEventListener("selectedChange", selectedChangeHandler);
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ColorPickerView.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ColorPickerView.as
index b17bbca..0ddff90 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ColorPickerView.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ColorPickerView.as
@@ -42,6 +42,7 @@ package org.apache.royale.html.beads
 	import org.apache.royale.html.supportClasses.IColorPickerPopUp;
 	import org.apache.royale.core.IColorModel;
     import org.apache.royale.core.IPopUp;
+    import org.apache.royale.html.util.getModelByType;
 	
 	/**
 	 *  The ColorPickerView class creates the visual elements of the org.apache.royale.html.ColorPicker 
@@ -184,7 +185,7 @@ package org.apache.royale.html.beads
 		public function set popUpVisible(value:Boolean):void
 		{
 			if (value && !list.visible) {
-				var model:IColorModel = _strand.getBeadByType(IColorModel) as IColorModel;
+      	var model:IColorModel = getModelByType(_strand,IColorModel) as IColorModel;
 				(list as IColorPickerPopUp).model = model;
 				list.visible = true;
 				
@@ -227,7 +228,7 @@ package org.apache.royale.html.beads
 		 */
 		protected function colorChangeAction():void
 		{
-			var model:IColorModel = _strand.getBeadByType(IColorModel) as IColorModel;
+      var model:IColorModel = getModelByType(_strand,IColorModel) as IColorModel;
 			COMPILE::JS 
 			{
 				selectedColorDisplay.element.style.backgroundColor = CSSUtils.attributeFromColor(model.color);
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ColorPickerWithEmptyView.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ColorPickerWithEmptyView.as
index c2a80d2..f1f4902 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ColorPickerWithEmptyView.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ColorPickerWithEmptyView.as
@@ -20,6 +20,7 @@ package org.apache.royale.html.beads
 {
 	import org.apache.royale.core.IColorModel;
 	import org.apache.royale.utils.CSSUtils;
+	import org.apache.royale.html.util.getModelByType;
 	
 	/**
 	 *  The ColorPickerWithEmptyView overrides ColorPickerView methods to visibly indicate that a selection is empty
@@ -43,7 +44,7 @@ package org.apache.royale.html.beads
 		 */
 		override protected function colorChangeAction():void
 		{
-			var model:IColorModel = _strand.getBeadByType(IColorModel) as IColorModel;
+      var model:IColorModel = getModelByType(_strand,IColorModel) as IColorModel;
 			var isEmpty:Boolean = isNaN(model.color);
 			COMPILE::JS 
 			{
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ComboBoxView.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ComboBoxView.as
index c0b549a..4358729 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ComboBoxView.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ComboBoxView.as
@@ -36,6 +36,7 @@ package org.apache.royale.html.beads
 	import org.apache.royale.geom.Point;
 	import org.apache.royale.html.beads.IComboBoxView;
 	import org.apache.royale.html.util.getLabelFromData;
+	import org.apache.royale.html.util.getModelByType;
 	
 	/**
 	 *  The ComboBoxView class creates the visual elements of the org.apache.royale.html.ComboBox 
@@ -144,7 +145,7 @@ package org.apache.royale.html.beads
 			list = new popUpClass() as UIBase;
 			list.visible = false;
 			
-			var model:IComboBoxModel = _strand.getBeadByType(IComboBoxModel) as IComboBoxModel;
+      var model:IComboBoxModel = getModelByType(_strand,IComboBoxModel) as IComboBoxModel;
 			model.addEventListener("selectedIndexChanged", handleItemChange);
 			model.addEventListener("selectedItemChanged", handleItemChange);
 			
@@ -177,7 +178,7 @@ package org.apache.royale.html.beads
 		public function set popUpVisible(value:Boolean):void
 		{
 			if (value && !list.visible) {
-				var model:IComboBoxModel = _strand.getBeadByType(IComboBoxModel) as IComboBoxModel;
+      var model:IComboBoxModel = getModelByType(_strand,IComboBoxModel) as IComboBoxModel;
 				list.model = model;
 				list.width = input.width;
 				list.height = 200;
@@ -222,7 +223,7 @@ package org.apache.royale.html.beads
 		 */
 		protected function itemChangeAction():void
 		{
-			var model:IComboBoxModel = _strand.getBeadByType(IComboBoxModel) as IComboBoxModel;
+      var model:IComboBoxModel = getModelByType(_strand,IComboBoxModel) as IComboBoxModel;
 			input.text = getLabelFromData(model,model.selectedItem);
 		}
 		
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataGridColumnChangePropagator.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataGridColumnChangePropagator.as
index 434bdb9..68c69d9 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataGridColumnChangePropagator.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataGridColumnChangePropagator.as
@@ -32,6 +32,8 @@ package org.apache.royale.html.beads
 	import org.apache.royale.html.beads.IDataGridView;
 	import org.apache.royale.core.IStrand;
 	import org.apache.royale.core.Bead;
+	import org.apache.royale.core.IStrandWithModel;
+	import org.apache.royale.core.IStrandWithModelView;
 	/**
 	 *  The DataGridColumnChangePropagator picks up the dataProviderChanged event
 	 *  and lets the data grid columns know about it.
@@ -57,26 +59,29 @@ package org.apache.royale.html.beads
 		
 		/**
 		 * @royaleignorecoercion org.apache.royale.events.IEventDispatcher
+		 * @royaleignorecoercion org.apache.royale.core.IStrandWithModel
 		 */
 		protected function finishSetup(e:Event):void
 		{
-			var model:IEventDispatcher = _strand.getBeadByType(IBeadModel) as IEventDispatcher;
+			var model:IEventDispatcher = (_strand as IStrandWithModel).model as IEventDispatcher;
 			model.addEventListener('dataProviderChanged', handleDataProviderChanged);
 		}
 		
 		/**
 		 * @royaleignorecoercion org.apache.royale.core.IDataGridModel
+		 * @royaleignorecoercion org.apache.royale.core.IStrandWithModelView
 		 * @royaleignorecoercion org.apache.royale.core.ISelectionModel
 		 * @royaleignorecoercion org.apache.royale.html.beads.IDataGridView
 		 * @royaleignorecoercion org.apache.royale.html.supportClasses.DataGridColumnList
 		 */
 		protected function handleDataProviderChanged(e:Event):void
 		{
-			var dataGridView:IDataGridView = _strand.getBeadByType(IDataGridView) as IDataGridView;
+			var strandType:IStrandWithModelView = _strand as IStrandWithModelView;
+			var dataGridView:IDataGridView = strandType.view as IDataGridView;
 			var lists:Array = dataGridView.columnLists;
 			if (lists == null) return;
 			
-			var sharedModel:IDataGridModel = _strand.getBeadByType(IBeadModel) as IDataGridModel;
+			var sharedModel:IDataGridModel = strandType.model as IDataGridModel;
 			for (var i:int=0; i < lists.length; i++)
 			{
 				var list:DataGridColumnList = lists[i] as DataGridColumnList;
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataGridColumnForceChangePropagator.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataGridColumnForceChangePropagator.as
index 168e0b2..4785c46 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataGridColumnForceChangePropagator.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataGridColumnForceChangePropagator.as
@@ -32,6 +32,7 @@ package org.apache.royale.html.beads
 	import org.apache.royale.html.beads.IDataGridView;
 	import org.apache.royale.core.IStrand;
 	import org.apache.royale.utils.sendBeadEvent;
+	import org.apache.royale.core.IStrandWithModel;
 	/**
 	 *  The DataGridColumnForceChangePropagator picks up the dataProviderChanged event
 	 *  and lets the data grid columns know about it, whether or not the data provider object was changed.
@@ -50,19 +51,27 @@ package org.apache.royale.html.beads
 		public function DataGridColumnForceChangePropagator()
 		{
 		}
-		
+		/**
+		 * @royaleignorecoercion org.apache.royale.core.IStrandWithModel
+		 */
 		public function set strand(value:IStrand):void
 		{
 			_strand = value;
-			var model:IEventDispatcher = value.getBeadByType(IBeadModel) as IEventDispatcher;
+			var model:IEventDispatcher = (value as IStrandWithModel).model as IEventDispatcher;
 			model.addEventListener('dataProviderChanged', handleDataProviderChanged);
 		}
-		
+		/**
+		 * @royaleignorecoercion org.apache.royale.core.IStrandWithModel
+		 * @royaleignorecoercion org.apache.royale.core.ISelectionModel
+		 * @royaleignorecoercion org.apache.royale.core.IDataGridModel
+		 * @royaleignorecoercion org.apache.royale.html.beads.IDataGridView
+		 * @royaleignorecoercion org.apache.royale.html.supportClasses.DataGridColumnList
+		 */
 		protected function handleDataProviderChanged(e:Event):void
 		{
 			var dataGridView:IDataGridView = _strand.getBeadByType(IDataGridView) as IDataGridView;
 			var lists:Array = dataGridView.columnLists;
-			var sharedModel:IDataGridModel = _strand.getBeadByType(IBeadModel) as IDataGridModel;
+			var sharedModel:IDataGridModel = (_strand as IStrandWithModel).model as IDataGridModel;
 			for (var i:int=0; i < lists.length; i++)
 			{
 				var list:DataGridColumnList = lists[i] as DataGridColumnList;
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataGridLinesBead.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataGridLinesBead.as
index 6350e8b..77b5115 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataGridLinesBead.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataGridLinesBead.as
@@ -35,6 +35,7 @@ package org.apache.royale.html.beads
     import org.apache.royale.html.beads.DataGridView;
 	import org.apache.royale.html.beads.models.DataGridPresentationModel;
 	import org.apache.royale.html.supportClasses.DataGridColumn;
+	import org.apache.royale.core.IStrandWithModelView;
 	
 	/**
 	 * The DataGridLinesBead is an add on bead for the DataGrid. This bead
@@ -113,6 +114,13 @@ package org.apache.royale.html.beads
 		protected var _area:UIBase;
 		
 		/**
+		 * @royaleignorecoercion org.apache.royale.core.IStrandWithModelView
+		 */
+		private function get typedStrand():IStrandWithModelView
+		{
+			return _strand as IStrandWithModelView
+		}
+		/**
 		 * Invoked when all of the beads have been added to the DataGrid. This
 		 * function seeks the Container that parents the lists that are the DataGrid's
 		 * columns. An overlay GraphicContainer is added to this Container so that the
@@ -122,6 +130,7 @@ package org.apache.royale.html.beads
 	     *  @playerversion Flash 10.2
 	     *  @playerversion AIR 2.6
 	     *  @productversion Royale 0.0
+		 * @royaleignorecoercion org.apache.royale.events.IEventDispatcher
 		 */
 		protected function handleInitComplete(event:Event):void
 		{
@@ -134,20 +143,20 @@ package org.apache.royale.html.beads
             }
 
 			// Now set up listeners to handle changes in the size of the DataGrid.
-			IEventDispatcher(_strand).addEventListener("sizeChanged", drawLines);
-			IEventDispatcher(_strand).addEventListener("widthChanged", drawLines);
-			IEventDispatcher(_strand).addEventListener("heightChanged", drawLines);
+			host.addEventListener("sizeChanged", drawLines);
+			host.addEventListener("widthChanged", drawLines);
+			host.addEventListener("heightChanged", drawLines);
 			
 			// Also set up a listener on the model to know when the dataProvider has
 			// changed which might affect the number of rows/columns and thus the
 			// grid lines.
-			var model:IBeadModel = _strand.getBeadByType(IBeadModel) as IBeadModel;
-			IEventDispatcher(model).addEventListener("dataProviderChanged", drawLines);
+			var model:IBeadModel = typedStrand.model as IBeadModel;
+			(model as IEventDispatcher).addEventListener("dataProviderChanged", drawLines);
 		}
 		
         protected function getDataProviderLength():int
         {
-            var sharedModel:IDataGridModel = _strand.getBeadByType(IBeadModel) as IDataGridModel;
+            var sharedModel:IDataGridModel = typedStrand.model as IDataGridModel;
             var arrayList:ArrayList = sharedModel.dataProvider as ArrayList;
             return arrayList.length;            
         }
@@ -164,7 +173,7 @@ package org.apache.royale.html.beads
 		 */
 		protected function drawLines(event:Event):void
 		{
-			var sharedModel:IDataGridModel = _strand.getBeadByType(IBeadModel) as IDataGridModel;
+			var sharedModel:IDataGridModel = typedStrand.model as IDataGridModel;
 			var presentationModel:DataGridPresentationModel = _strand.getBeadByType(DataGridPresentationModel) as DataGridPresentationModel;
 			var layoutParent:ILayoutHost = _area.getBeadByType(ILayoutHost) as ILayoutHost;
 			var contentView:IParentIUIBase = layoutParent.contentView as IParentIUIBase;
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataGridView.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataGridView.as
index 90d778e..6804c99 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataGridView.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataGridView.as
@@ -42,6 +42,7 @@ package org.apache.royale.html.beads
 	import org.apache.royale.html.supportClasses.Viewport;
 	import org.apache.royale.utils.sendStrandEvent;
 	import org.apache.royale.utils.sendEvent;
+	import org.apache.royale.core.IStrandWithModelView;
 
 		/**
 		 *  The DataGridView class is the visual bead for the org.apache.royale.html.DataGrid.
@@ -183,13 +184,19 @@ package org.apache.royale.html.beads
 				if (_listArea)
 					sendEvent(_listArea,"layoutChanged");
 			}
-
+			/**
+			 * @royaleignorecoercion org.apache.royale.core.IStrandWithModelView
+			 */
+			private function get typedStrand():IStrandWithModelView
+			{
+				return _strand as IStrandWithModelView
+			}
 			/**
 			 * @private
 			 */
 			protected function handleDataProviderChanged(event:Event):void
 			{
-                var sharedModel:IDataGridModel = _strand.getBeadByType(IBeadModel) as IDataGridModel;
+                var sharedModel:IDataGridModel = typedStrand.model as IDataGridModel;
 				var l:uint = _lists ?  _lists.length : 0;
                 for (var i:int=0; i < l; i++)
                 {
@@ -206,7 +213,7 @@ package org.apache.royale.html.beads
 			 */
 			private function handleSelectedIndexChanged(event:Event):void
 			{
-				var sharedModel:IDataGridModel = _strand.getBeadByType(IBeadModel) as IDataGridModel;
+				var sharedModel:IDataGridModel = typedStrand.model as IDataGridModel;
 				var newIndex:int = sharedModel.selectedIndex;
 
 				for (var i:int=0; i < _lists.length; i++)
@@ -223,7 +230,7 @@ package org.apache.royale.html.beads
 			 */
 			private function handleColumnListChange(event:Event):void
 			{
-				var sharedModel:IDataGridModel = _strand.getBeadByType(IBeadModel) as IDataGridModel;
+				var sharedModel:IDataGridModel = typedStrand.model as IDataGridModel;
 				var list:IDataGridColumnList = event.currentTarget as IDataGridColumnList;
 				sharedModel.selectedIndex = list.selectedIndex;
 
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DateFieldView.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DateFieldView.as
index 161bb02..558226a 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DateFieldView.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DateFieldView.as
@@ -45,6 +45,8 @@ package org.apache.royale.html.beads
 		import org.apache.royale.html.beads.TextInputView;
 		import flash.text.TextFieldType;
 	}
+	import org.apache.royale.core.IStrandWithModel;
+	import org.apache.royale.html.util.getModelByType;
 
 	/**
 	 * The DateFieldView class is a bead for DateField that creates the
@@ -146,12 +148,15 @@ package org.apache.royale.html.beads
 
 			getHost().addEventListener("initComplete",handleInitComplete);
 		}
-
+		/**
+		 * @royaleignorecoercion org.apache.royale.core.IBeadModel
+		 * @royaleignorecoercion org.apache.royale.core.IStrandWithModel
+		 */
 		private function handleInitComplete(event:Event):void
 		{
 			_textInput.height = _button.height;
 
-			var model:IBeadModel = _strand.getBeadByType(IBeadModel) as IBeadModel;
+			var model:IBeadModel = (_strand as IStrandWithModel).model as IBeadModel;
 			IEventDispatcher(model).addEventListener("selectedDateChanged", selectionChangeHandler);
 		}
 
@@ -206,7 +211,7 @@ package org.apache.royale.html.beads
                         _popUp = ValuesManager.valuesImpl.newInstance(_strand, "iPopUp") as IDateChooser;
                     }
 
-					var model:IDateChooserModel = _strand.getBeadByType(IDateChooserModel) as IDateChooserModel;
+					var model:IDateChooserModel = getModelByType(_strand,IDateChooserModel) as IDateChooserModel;
 					_popUp.selectedDate = model.selectedDate;
                     var popUpModel:IDateChooserModelWithChangeCheck = _popUp.getBeadByType(IDateChooserModelWithChangeCheck) as IDateChooserModelWithChangeCheck;
                     popUpModel.disableChangeCheck = true;
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ErrorImage.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ErrorImage.as
index d3f6e69..8516bb9 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ErrorImage.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ErrorImage.as
@@ -23,6 +23,7 @@ package org.apache.royale.html.beads {
     import org.apache.royale.core.IImageModel;
     import org.apache.royale.core.IStrand;
     import org.apache.royale.events.Event;
+    import org.apache.royale.html.util.getModelByType;
   
     /**
 	 *  The ErrorImage class is a bead that can be used to 
@@ -91,7 +92,7 @@ package org.apache.royale.html.beads {
         protected function get hostModel():IImageModel
         {    
             if(!_hostModel)
-                _hostModel = _strand.getBeadByType(IImageModel) as IImageModel;
+                _hostModel = getModelByType(_strand,IImageModel) as IImageModel;
             return _hostModel;
         }
 
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/MultiSelectionListView.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/MultiSelectionListView.as
index f99b479..da9bde3 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/MultiSelectionListView.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/MultiSelectionListView.as
@@ -41,6 +41,7 @@ package org.apache.royale.html.beads
 	import org.apache.royale.events.IEventDispatcher;
 	import org.apache.royale.html.supportClasses.Border;
 	import org.apache.royale.html.supportClasses.DataGroup;
+	import org.apache.royale.html.util.getModelByType;
 
 	/**
 	 *  The List class creates the visual elements of the org.apache.royale.html.List
@@ -71,7 +72,7 @@ package org.apache.royale.html.beads
 		 */
 		override protected function handleInitComplete(event:Event):void
 		{
-			listModel = _strand.getBeadByType(IMultiSelectionModel) as IMultiSelectionModel;
+			listModel = getModelByType(_strand,IMultiSelectionModel) as IMultiSelectionModel;
 			listModel.addEventListener("selectedIndicesChanged", selectionChangeHandler);
 			listModel.addEventListener("rollOverIndexChanged", rollOverIndexChangeHandler);
 
@@ -156,7 +157,7 @@ package org.apache.royale.html.beads
 		{
 			super.handleInitComplete(event);
 
-			listModel = _strand.getBeadByType(IMultiSelectionModel) as IMultiSelectionModel;
+			listModel = getModelByType(_strand,IMultiSelectionModel) as IMultiSelectionModel;
 			listModel.addEventListener("selectedIndicesChanged", selectionChangeHandler);
 			listModel.addEventListener("rollOverIndexChanged", rollOverIndexChangeHandler);
 		}
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/RadioButtonView.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/RadioButtonView.as
index 32abe85..617b922 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/RadioButtonView.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/RadioButtonView.as
@@ -30,6 +30,7 @@ package org.apache.royale.html.beads
 	import org.apache.royale.core.IStrand;
 	import org.apache.royale.core.IValueToggleButtonModel;
 	import org.apache.royale.events.Event;
+	import org.apache.royale.html.util.getModelByType;
 	
 	/**
 	 *  The RadioButtonView class creates the visual elements of the org.apache.royale.html.RadioButton 
@@ -107,7 +108,7 @@ package org.apache.royale.html.beads
 		override public function set strand(value:IStrand):void
 		{
 			super.strand = value;
-			_toggleButtonModel = value.getBeadByType(IValueToggleButtonModel) as IValueToggleButtonModel;
+			_toggleButtonModel = getModelByType(value,IValueToggleButtonModel) as IValueToggleButtonModel;
 			_toggleButtonModel.addEventListener("textChange", textChangeHandler);
 			_toggleButtonModel.addEventListener("htmlChange", htmlChangeHandler);
 			_toggleButtonModel.addEventListener("selectedValueChange", selectedValueChangeHandler);
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ScrollBarView.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ScrollBarView.as
index fc3d381..951e4b4 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ScrollBarView.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ScrollBarView.as
@@ -34,6 +34,7 @@ package org.apache.royale.html.beads
 	import org.apache.royale.html.Button;
 	import org.apache.royale.html.beads.controllers.ButtonAutoRepeatController;
 	import org.apache.royale.utils.loadBeadFromValuesManager;
+	import org.apache.royale.html.util.getModelByType;
 
     /**
      *  The ScrollBarView class is the default view for
@@ -109,7 +110,7 @@ package org.apache.royale.html.beads
             for each (var bead:IBead in beads)
                 addBead(bead);
                         
-			sbModel = value.getBeadByType(IScrollBarModel) as IScrollBarModel;
+			sbModel = getModelByType(value,IScrollBarModel) as IScrollBarModel;
             sbModel.addEventListener("maximumChange", changeHandler);
             sbModel.addEventListener("minimumChange", changeHandler);
             sbModel.addEventListener("snapIntervalChange", changeHandler);
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/SimpleAlertView.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/SimpleAlertView.as
index 1e8cdd1..f6fa841 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/SimpleAlertView.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/SimpleAlertView.as
@@ -39,6 +39,7 @@ package org.apache.royale.html.beads
 	import org.apache.royale.utils.loadBeadFromValuesManager;
 	import org.apache.royale.html.beads.IBackgroundBead;
 	import org.apache.royale.html.beads.IBorderBead;
+	import org.apache.royale.html.util.getModelByType;
 	
 	/**
 	 *  The SimpleAlertView class creates the visual elements of the 
@@ -100,7 +101,7 @@ package org.apache.royale.html.beads
 				loadBeadFromValuesManager(IBorderBead, "iBorderBead", value);
 			}
 			
-			var model:IAlertModel = _strand.getBeadByType(IAlertModel) as IAlertModel;
+			var model:IAlertModel = getModelByType(_strand,IAlertModel) as IAlertModel;
 			model.addEventListener("messageChange",handleMessageChange);
 			model.addEventListener("htmlMessageChange",handleMessageChange);
 
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/SliderView.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/SliderView.as
index 17eb60b..794bbc5 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/SliderView.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/SliderView.as
@@ -40,6 +40,7 @@ package org.apache.royale.html.beads
     import org.apache.royale.html.TextButton;
     import org.apache.royale.utils.sendStrandEvent;
     import org.apache.royale.utils.loadBeadFromValuesManager;
+    import org.apache.royale.core.IStrandWithModel;
 	
 	/**
 	 *  The SliderView class creates the visual elements of the org.apache.royale.html.Slider 
@@ -77,6 +78,7 @@ package org.apache.royale.html.beads
 		 * 
 		 *  @royaleignorecoercion org.apache.royale.core.IParent
 		 *  @royaleignorecoercion org.apache.royale.core.IRangeModel
+		 *  @royaleignorecoercion org.apache.royale.core.IStrandWithModel
 		 *  @royaleignorecoercion org.apache.royale.events.IEventDispatcher
 		 */
 		override public function set strand(value:IStrand):void
@@ -112,7 +114,7 @@ package org.apache.royale.html.beads
 				(host as IParent).addElement(_thumb);
 			}
 			
-			rangeModel = _strand.getBeadByType(IBeadModel) as IRangeModel;
+			rangeModel = (_strand as IStrandWithModel).model as IRangeModel;
 
 			var rm:IEventDispatcher = rangeModel as IEventDispatcher;
 			
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/SpinnerView.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/SpinnerView.as
index 2e5d5e8..2cf47c7 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/SpinnerView.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/SpinnerView.as
@@ -34,10 +34,12 @@ COMPILE::SWF {
 	import org.apache.royale.events.IEventDispatcher;
 	import org.apache.royale.html.Button;
 
-COMPILE::JS {
-	import org.apache.royale.html.beads.controllers.SpinnerMouseController;
-    import org.apache.royale.html.supportClasses.SpinnerButton;
-}
+	COMPILE::JS {
+		import org.apache.royale.html.beads.controllers.SpinnerMouseController;
+		import org.apache.royale.html.supportClasses.SpinnerButton;
+	}
+    import org.apache.royale.html.util.getModelByType;
+    import org.apache.royale.core.IStrandWithModel;
 
 	/**
 	 *  The SpinnerView class creates the visual elements of the org.apache.royale.html.Spinner
@@ -104,7 +106,7 @@ COMPILE::JS {
 
 				UIBase(_strand).$sprite_addChild(_decrement);
 				UIBase(_strand).$sprite_addChild(_increment);
-				rangeModel = _strand.getBeadByType(IBeadModel) as IRangeModel;
+				rangeModel = (_strand as IStrandWithModel).model as IRangeModel;
 			}
 			IEventDispatcher(value).addEventListener("widthChanged",sizeChangeHandler);
 			IEventDispatcher(value).addEventListener("heightChanged",sizeChangeHandler);
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TextButtonView.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TextButtonView.as
index 726e5f0..2684a7d 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TextButtonView.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TextButtonView.as
@@ -30,6 +30,7 @@ package org.apache.royale.html.beads
 	import org.apache.royale.core.ITextModel;
 	import org.apache.royale.events.Event;
 	import org.apache.royale.events.IEventDispatcher;
+	import org.apache.royale.html.util.getModelByType;
 
     /**
      *  The TextButtonView class is the default view for
@@ -94,7 +95,7 @@ package org.apache.royale.html.beads
 		override public function set strand(value:IStrand):void
 		{
 			super.strand = value;
-			textModel = value.getBeadByType(ITextModel) as ITextModel;
+			textModel = getModelByType(value,ITextModel) as ITextModel;
 			textModel.addEventListener("textChange", textChangeHandler);
 			textModel.addEventListener("htmlChange", htmlChangeHandler);
 			shape = new Shape();
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TextFieldViewBase.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TextFieldViewBase.as
index f5bfa2b..5f38c80 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TextFieldViewBase.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TextFieldViewBase.as
@@ -30,6 +30,7 @@ package org.apache.royale.html.beads
 	import org.apache.royale.core.ValuesManager;
 	import org.apache.royale.events.Event;
 	import org.apache.royale.events.IEventDispatcher;
+	import org.apache.royale.html.util.getModelByType;
 	
     /**
      *  The TextFieldViewBase class is the base class for
@@ -88,7 +89,7 @@ package org.apache.royale.html.beads
 		public function set strand(value:IStrand):void
 		{
 			_strand = value;
-			_textModel = value.getBeadByType(ITextModel) as ITextModel;
+			_textModel = getModelByType(value,ITextModel) as ITextModel;
             _textModel.addEventListener("textChange", textChangeHandler);
             _textModel.addEventListener("htmlChange", htmlChangeHandler);
             IEventDispatcher(_strand).addEventListener("widthChanged", widthChangeHandler);
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TreeGridView.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TreeGridView.as
index 781e735..e96a40d 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TreeGridView.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TreeGridView.as
@@ -46,6 +46,7 @@ package org.apache.royale.html.beads
 	import org.apache.royale.html.supportClasses.IDataGridColumn;
 	import org.apache.royale.utils.sendStrandEvent;
 	import org.apache.royale.utils.loadBeadFromValuesManager;
+	import org.apache.royale.core.IStrandWithModel;
 	
 	/**
 	 * The TreeGridView class is responsible for creating the sub-components of the TreeGrid:
@@ -218,10 +219,11 @@ package org.apache.royale.html.beads
 		/**
 		 * @private
 		 * @royaleignorecoercion org.apache.royale.core.IDataGridModel
+		 * @royaleignorecoercion org.apache.royale.core.IStrandWithModel
 		 */
 		private function handleSelectedIndexChanged(event:Event):void
 		{
-			var sharedModel:IDataGridModel = _strand.getBeadByType(IBeadModel) as IDataGridModel;
+			var sharedModel:IDataGridModel = (_strand as IStrandWithModel).model as IDataGridModel;
 			var newIndex:int = sharedModel.selectedIndex;
 			
 			for(var i:int=0; i < _lists.length; i++) {
@@ -234,10 +236,11 @@ package org.apache.royale.html.beads
 		/**
 		 * @private
 		 * @royaleignorecoercion org.apache.royale.core.IDataGridModel
+		 * @royaleignorecoercion org.apache.royale.core.IStrandWithModel
 		 */
 		private function handleColumnListChange(event:Event):void
 		{
-			var sharedModel:IDataGridModel = _strand.getBeadByType(IBeadModel) as IDataGridModel;
+			var sharedModel:IDataGridModel = (_strand as IStrandWithModel).model as IDataGridModel;
 			
 			if (event.target is List) {
 				var list:List = event.target as List;
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/VScrollBarView.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/VScrollBarView.as
index 75e713a..5e25ed7 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/VScrollBarView.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/VScrollBarView.as
@@ -33,6 +33,7 @@ package org.apache.royale.html.beads
     import org.apache.royale.events.Event;
 	import org.apache.royale.html.Button;
 	import org.apache.royale.html.beads.controllers.ButtonAutoRepeatController;
+	import org.apache.royale.html.util.getModelByType;
 
     /**
      *  The ScrollBarView class is the default view for
@@ -76,7 +77,7 @@ package org.apache.royale.html.beads
         override protected function changeHandler(event:Event):void
         {
         	layout.layout();
-        	sbModel = host.getBeadByType(IScrollBarModel) as IScrollBarModel;
+        	sbModel = getModelByType(host,IScrollBarModel) as IScrollBarModel;
         	sbModel.stepSize = Math.max(Math.round(host.height / STEP_RATE), 1);
         }            
 
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/CascadingMenuSelectionMouseController.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/CascadingMenuSelectionMouseController.as
index 6fb7862..d259006 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/CascadingMenuSelectionMouseController.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/CascadingMenuSelectionMouseController.as
@@ -35,6 +35,7 @@ package org.apache.royale.html.beads.controllers
 	COMPILE::JS {
 		import org.apache.royale.events.BrowserEvent;
 	}
+	import org.apache.royale.core.IStrandWithModel;
 
 	/**
 	 * The CascadingMenuSelectionMouseController does the same job as the MenuSelectionMouseController
@@ -72,12 +73,13 @@ package org.apache.royale.html.beads.controllers
 		 *  @playerversion Flash 10.2
 		 *  @playerversion AIR 2.6
 		 *  @productversion Royale 0.9.6
+		 * @royaleignorecoercion org.apache.royale.core.IStrandWithModel
 		 */
 		override protected function selectedHandler(event:ItemClickedEvent):void
 		{
 			var node:Object = event.data;
 			
-			var model:ICascadingMenuModel = _strand.getBeadByType(IBeadModel) as ICascadingMenuModel;
+			var model:ICascadingMenuModel = (_strand as IStrandWithModel).model as ICascadingMenuModel;
 			
 			if (getHasMenu(node, model)) {
 				var c:Class = ValuesManager.valuesImpl.getValue(_strand, "iMenu");
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/DateChooserMouseController.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/DateChooserMouseController.as
index b016f47..da803ca 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/DateChooserMouseController.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/DateChooserMouseController.as
@@ -30,6 +30,7 @@ package org.apache.royale.html.beads.controllers
 	import org.apache.royale.events.Event;
 	import org.apache.royale.events.MouseEvent;
 	import org.apache.royale.events.IEventDispatcher;
+	import org.apache.royale.core.IStrandWithModelView;
 	
 	/**
 	 *  The DateChooserMouseController class is responsible for listening to
@@ -56,7 +57,14 @@ package org.apache.royale.html.beads.controllers
 		}
 		
 		private var _strand:IStrand;
-		
+
+		/**
+		 * @royaleignorecoercion org.apache.royale.core.IStrandWithModelView
+		 */
+		private function get host():IStrandWithModelView
+		{
+			return _strand as IStrandWithModelView
+		}
 		/**
 		 *  @copy org.apache.royale.core.IBead#strand
 		 *  
@@ -71,7 +79,7 @@ package org.apache.royale.html.beads.controllers
 		{
 			_strand = value;
 			
-			var view:DateChooserView = value.getBeadByType(IBeadView) as DateChooserView;
+			var view:DateChooserView = host.view as DateChooserView;
 			view.prevMonthButton.addEventListener("click", prevMonthClickHandler);
 			view.nextMonthButton.addEventListener("click", nextMonthClickHandler);
 			
@@ -86,7 +94,7 @@ package org.apache.royale.html.beads.controllers
 		private function listHandler(event:Event):void
 		{
 			var list:DateChooserList = event.target as DateChooserList;
-			var model:DateChooserModel = _strand.getBeadByType(IBeadModel) as DateChooserModel;                     
+			var model:DateChooserModel = host.model as DateChooserModel;
 			model.selectedDate = list.selectedItem as Date;
 		}
 
@@ -98,7 +106,7 @@ package org.apache.royale.html.beads.controllers
 		{
 			event.preventDefault();
             
-			var model:DateChooserModel = _strand.getBeadByType(IBeadModel) as DateChooserModel;
+			var model:DateChooserModel = host.model as DateChooserModel;
 			var month:Number = model.displayedMonth - 1;
 			var year:Number  = model.displayedYear;
 			if (month < 0) {
@@ -117,7 +125,7 @@ package org.apache.royale.html.beads.controllers
 		{
 			event.preventDefault();
             
-			var model:DateChooserModel = _strand.getBeadByType(IBeadModel) as DateChooserModel;
+			var model:DateChooserModel = host.model as DateChooserModel;
 			var month:Number = model.displayedMonth + 1;
 			var year:Number  = model.displayedYear;
 			if (month >= 12) {
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/DateFieldMouseController.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/DateFieldMouseController.as
index 4b1765a..0cfafd0 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/DateFieldMouseController.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/DateFieldMouseController.as
@@ -30,6 +30,7 @@ package org.apache.royale.html.beads.controllers
     import org.apache.royale.utils.Timer;
     import org.apache.royale.utils.UIUtils;
     import org.apache.royale.utils.sendStrandEvent;
+    import org.apache.royale.html.util.getModelByType;
 	
 	/**
 	 * The DateFieldMouseController class is responsible for monitoring
@@ -132,7 +133,7 @@ package org.apache.royale.html.beads.controllers
             
 			var viewBead:DateFieldView = _strand.getBeadByType(DateFieldView) as DateFieldView;
 			
-			var model:IDateChooserModel = _strand.getBeadByType(IDateChooserModel) as IDateChooserModel;
+			var model:IDateChooserModel = getModelByType(_strand,IDateChooserModel) as IDateChooserModel;
 			model.selectedDate = IDateChooserModel(viewBead.popUp.getBeadByType(IDateChooserModel)).selectedDate;
 
 			viewBead.popUpVisible = false;
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/MenuBarMouseController.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/MenuBarMouseController.as
index c3b74c9..78672b8 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/MenuBarMouseController.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/MenuBarMouseController.as
@@ -35,6 +35,7 @@ package org.apache.royale.html.beads.controllers
 	import org.apache.royale.utils.UIUtils;
 	import org.apache.royale.utils.loadBeadFromValuesManager;
 	import org.apache.royale.utils.sendEvent;
+	import org.apache.royale.core.IStrandWithModel;
 
 	/**
 	 * The MenuBarMouseController handles mouse events for the MenuBar. While the menu bar is
@@ -105,6 +106,7 @@ package org.apache.royale.html.beads.controllers
 		 *  @royaleignorecoercion org.apache.royale.core.UIBase
 		 *  @royaleignorecoercion org.apache.royale.core.IFactory
 		 *  @royaleignorecoercion org.apache.royale.core.IMenuBarModel
+		 *  @royaleignorecoercion org.apache.royale.core.IStrandWithModel
      * @royaleignorecoercion org.apache.royale.events.IEventDispatcher
 		 */
 		override protected function selectedHandler(event:ItemClickedEvent):void
@@ -118,7 +120,7 @@ package org.apache.royale.html.beads.controllers
 			var menuFactory:IFactory = loadBeadFromValuesManager(IFactory, "iMenuFactory", _strand) as IFactory;
 			var menu:IMenu = menuFactory.newInstance() as IMenu;
 			
-			var model:IMenuBarModel = _strand.getBeadByType(IBeadModel) as IMenuBarModel;
+			var model:IMenuBarModel = (_strand as IStrandWithModel).model as IMenuBarModel;
 			
 			menu.dataProvider = getMenuDataProvider(event.data, model.submenuField);
 			menu.labelField = model.labelField;
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/ScrollBarMouseControllerBase.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/ScrollBarMouseControllerBase.as
index 71b2bab..5d92c25 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/ScrollBarMouseControllerBase.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/ScrollBarMouseControllerBase.as
@@ -26,6 +26,7 @@ package org.apache.royale.html.beads.controllers
     import org.apache.royale.events.MouseEvent;
 	import org.apache.royale.html.beads.IScrollBarView;
 	import org.apache.royale.utils.sendStrandEvent;
+	import org.apache.royale.html.util.getModelByType;
 
     /**
      *  The ScrollBarMouseControllerBase class is the base class
@@ -91,7 +92,7 @@ package org.apache.royale.html.beads.controllers
 		public function set strand(value:IStrand):void
 		{
 			_strand = value;
-			sbModel = value.getBeadByType(IScrollBarModel) as IScrollBarModel;
+			sbModel = getModelByType(value,IScrollBarModel) as IScrollBarModel;
 			sbView = value.getBeadByType(IScrollBarView) as IScrollBarView;
 			sbView.decrement.addEventListener(MouseEvent.CLICK, decrementClickHandler);
 			sbView.increment.addEventListener(MouseEvent.CLICK, incrementClickHandler);
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/ButtonBarLayout.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/ButtonBarLayout.as
index 5bf485f..f7b788a 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/ButtonBarLayout.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/ButtonBarLayout.as
@@ -25,6 +25,7 @@ package org.apache.royale.html.beads.layouts
 	import org.apache.royale.core.IStrand;
 	import org.apache.royale.html.beads.models.ButtonBarModel;
 	import org.apache.royale.html.supportClasses.UIItemRendererBase;
+	import org.apache.royale.html.util.getModelByType;
 
 	/**
 	 *  The ButtonBarLayout class bead sizes and positions the button
@@ -83,7 +84,7 @@ package org.apache.royale.html.beads.layouts
 		{
 			var contentView:ILayoutView = layoutView;
 
-			var model:ButtonBarModel = (host as IStrand).getBeadByType(ButtonBarModel) as ButtonBarModel;
+			var model:ButtonBarModel = getModelByType(_strand,ButtonBarModel) as ButtonBarModel;
 			if (model) {
 				buttonWidths = model.buttonWidths;
 				_widthType = model.widthType;
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/DataGridLayout.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/DataGridLayout.as
index b1922c7..d29aa85 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/DataGridLayout.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/DataGridLayout.as
@@ -37,6 +37,7 @@ package org.apache.royale.html.beads.layouts
     import org.apache.royale.html.beads.models.ButtonBarModel;
     import org.apache.royale.html.supportClasses.IDataGridColumn;
     import org.apache.royale.core.Bead;
+    import org.apache.royale.html.util.getModelByType;
 	
 	/**
 	 * DataGridLayout is a class that handles the size and positioning of the
@@ -106,7 +107,7 @@ package org.apache.royale.html.beads.layouts
 			// fancier DG's will filter invisible columns and only put visible columns
 			// in the bbmodel, so do all layout based on the bbmodel, not the set
 			// of columns that may contain invisible columns
-			var bbmodel:ButtonBarModel = header.getBeadByType(ButtonBarModel) as ButtonBarModel;
+			var bbmodel:ButtonBarModel = getModelByType(header,ButtonBarModel) as ButtonBarModel;
 			return bbmodel.dataProvider as Array;
 		}
 
@@ -120,7 +121,7 @@ package org.apache.royale.html.beads.layouts
 			// fancier DG's will filter invisible columns and only put visible columns
 			// in the bbmodel, so do all layout based on the bbmodel, not the set
 			// of columns that may contain invisible columns
-			var bbmodel:ButtonBarModel = header.getBeadByType(ButtonBarModel) as ButtonBarModel;
+			var bbmodel:ButtonBarModel = getModelByType(header,ButtonBarModel) as ButtonBarModel;
 			bbmodel.buttonWidths = columnWidths;
 		}
         
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/HScrollBarLayout.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/HScrollBarLayout.as
index 4b2ebd4..9446024 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/HScrollBarLayout.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/HScrollBarLayout.as
@@ -32,6 +32,7 @@ package org.apache.royale.html.beads.layouts
     import org.apache.royale.geom.Rectangle;
 	import org.apache.royale.html.beads.IScrollBarView;
 	import org.apache.royale.html.Button;
+	import org.apache.royale.html.util.getModelByType;
 
     /**
      *  The HScrollBarLayout class is a layout
@@ -84,7 +85,7 @@ package org.apache.royale.html.beads.layouts
 		public function layout():Boolean
 		{
             if (!sbModel)
-                sbModel = _strand.getBeadByType(IScrollBarModel) as IScrollBarModel
+                sbModel = getModelByType(_strand,IScrollBarModel) as IScrollBarModel
 					
 			var metrics:EdgeData = (ValuesManager.valuesImpl as IBorderPaddingMarginValuesImpl).getBorderAndPaddingMetrics(_strand as IUIBase);
             
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/TreeGridLayout.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/TreeGridLayout.as
index 4c38110..ff57506 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/TreeGridLayout.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/TreeGridLayout.as
@@ -36,6 +36,7 @@ package org.apache.royale.html.beads.layouts
 	import org.apache.royale.html.supportClasses.TreeGridColumn;
 	import org.apache.royale.core.IRenderedObject;
 	import org.apache.royale.core.Bead;
+	import org.apache.royale.html.util.getModelByType;
 	
 	/**
 	 * The TreeGridLayout class provides the sizing and positioning for the sub-components
@@ -166,7 +167,7 @@ package org.apache.royale.html.beads.layouts
 				xpos += columnList.width;
 			}
 			
-			var bbmodel:ButtonBarModel = header.getBeadByType(ButtonBarModel) as ButtonBarModel;
+			var bbmodel:ButtonBarModel = getModelByType(header,ButtonBarModel) as ButtonBarModel;
 			bbmodel.buttonWidths = columnWidths;
 			header.dispatchEvent(new Event("layoutNeeded"));
 			
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/VScrollBarLayout.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/VScrollBarLayout.as
index 8490238..543d4d7 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/VScrollBarLayout.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/VScrollBarLayout.as
@@ -32,6 +32,7 @@ package org.apache.royale.html.beads.layouts
     import org.apache.royale.geom.Rectangle;
 	import org.apache.royale.html.beads.IScrollBarView;
 	import org.apache.royale.html.beads.ScrollBarView;
+	import org.apache.royale.html.util.getModelByType;
 
     /**
      *  The VScrollBarLayout class is a layout
@@ -83,7 +84,7 @@ package org.apache.royale.html.beads.layouts
 		public function layout():Boolean
 		{
             if (!sbModel)
-                sbModel = _strand.getBeadByType(IScrollBarModel) as IScrollBarModel
+                sbModel = getModelByType(_strand,IScrollBarModel) as IScrollBarModel
 					
 			var metrics:EdgeData = (ValuesManager.valuesImpl as IBorderPaddingMarginValuesImpl).getBorderAndPaddingMetrics(_strand as IUIBase);
                     
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/AccordionItemRenderer.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/AccordionItemRenderer.as
index 9cb303e..5479d3e 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/AccordionItemRenderer.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/AccordionItemRenderer.as
@@ -27,6 +27,7 @@ package org.apache.royale.html.supportClasses
 	import org.apache.royale.html.Panel;
 	import org.apache.royale.html.TitleBar;
 	import org.apache.royale.html.beads.PanelView;
+	import org.apache.royale.html.util.getModelByType;
 	
 	public class AccordionItemRenderer extends Panel implements IItemRenderer, ICollapsible
 	{
@@ -60,7 +61,9 @@ package org.apache.royale.html.supportClasses
 		{
 			super.height = value;
 		}
-		
+		/**
+		 * @royaleignorecoercion org.apache.royale.core.IStrand
+		 */
 		public function set data(value:Object):void
 		{
 			while (numElements > 0)
@@ -71,7 +74,7 @@ package org.apache.royale.html.supportClasses
 			var dataAsStrand:IStrand = value as IStrand;
 			if (dataAsStrand)
 			{
-				var dataTitleModel:ITitleBarModel = dataAsStrand.getBeadByType(ITitleBarModel) as ITitleBarModel;
+				var dataTitleModel:ITitleBarModel = getModelByType(dataAsStrand,ITitleBarModel) as ITitleBarModel;
 				if (dataTitleModel)
 				{
 //					titleBar.model = dataTitleModel;