Looks like creating a new model would be the way to go then.  I am only
concerned about having to create a new interface/class heirarchy because
only one function's (source, in this case) signature is incompatible.

I saw something about function overloading somewhere.  If we get around to
doing that in FlexJS, that would be great as well.

The other approach would be to move contentious functions like these to a
separate interface like this:

public interface IExternalImageModel extends IImageModel,
IExternalSourceModel
public interface IExternalOrEmbeddedImageModel extends IImageModel,
IEmbeddedSourceModel

Where IExternalSourceModel would define:
function get source():String;
function set source(value:String):void;

and IEmbeddedSourceModel would define:
function get source():Object;
function set source(value:Object):void;

and IImageModel defines all the common methods.  In runtime, the user can
use the IImageModel's apis for everything except when they need to play
around with the source property.

Maybe I am over-engineering it, or maybe this pattern can be applied
everywhere where there are differences between the capabilities of Flash
Player and the Web browsers.  We are definitely going to be hitting these
cases more and more with FlexJS.

Thanks,
Om


On Wed, Sep 11, 2013 at 11:41 AM, Peter Ent <p...@adobe.com> wrote:

> I started with the source being Object but then I realized it might not
> make any sense on the JavaScript side so I made it a String. If someone
> wanted to load in a SWF, it would make the app unusable on the JavaScript
> side, so I would think they would change the beads or there would be a
> Flash-specific component for that.
>
> Peter
>
> On 9/11/13 2:21 PM, "Alex Harui" <aha...@adobe.com> wrote:
>
> >
> >
> >On 9/11/13 11:08 AM, "OmPrakash Muppirala" <bigosma...@gmail.com> wrote:
> >
> >>On Wed, Sep 11, 2013 at 10:58 AM, Alex Harui <aha...@adobe.com> wrote:
> >>
> >>> Maybe, or in FlexJS, where we don't try to make a one-size-fits-all
> >>> component, there will be a separate component called EmbeddedImage.
> >>
> >>
> >>I had a usecase in the past where I grab an bitmap data from the hard
> >>disk
> >>and while it is uploading in the background, I show that bitmap in an
> >>Image
> >>component.  And when the upload was finished, I would swap it out with
> >>the
> >>downloaded(processed) image from the server.  Swapping an EmbeddedImage
> >>component with an Image component would result in more unnecessary object
> >>creations and destructions.
> >A completely valid scenario, but, keeping with the pay-as-you-go
> >philosophy of FlexJS, you would create a custom component like the
> >EmbeddedOrRemoteImage you mention below, but it doesn't have to use the
> >same model.  I'm not clear the cost of having a different model is such
> >that FlexJS should give up type-checking for the 80% case, especially
> >because when migrating old Flex code, we should make it clear that this
> >simple FlexJS image component only knows about urls and that embeds are
> >probably better handled some other way (not sure what that way is just
> >yet).
> >
> >>
> >>
> >>> FWIW, most usage of embedded images in Flex via Image/SWFLoader was a
> >>> waste of
> >>> memory.  A much lighterweight class is possible.  For FlexJS, embedded
> >>> images on the AS side should not require much wrapping if at all, but
> >>>then
> >>> I think that makes your app un-portable to JS.
> >>>
> >>
> >>Totally agree.  Which is why proposed this change on the IImageModel and
> >>not Image.  This way, we can create an EmbeddedOrRemoteImage component
> >>without having to create a new model.
> >I was thinking the embedded image component (if we even have one since
> >these object might just get "new"-ed and addChild'd) would have a model
> >where the source is of type bitmapData or bytearay.  And this
> >EmbeddedOrRemoteImage component would have a different model with both an
> >embeddedSource and remoteSource properties.  But that's just a first
> >guess.
> >
> >>
> >>Also, on the JS side, this change is moot because you can pass in a
> >>string
> >>or an object or whatever.  That will need to be taken care of in the
> >>setter
> >>on the javascript version.
> >I'm not sure I understand your point.  Yes, there is no type-checking in
> >JS, but in FlexJS folks aren't writing JS code directly so the only thing
> >that should be passed in is the URL that got cross-compiled.
> >
> >>
> >>Thanks,
> >>Om
> >>
> >>
> >>>
> >>> On 9/11/13 10:53 AM, "OmPrakash Muppirala" <bigosma...@gmail.com>
> >>>wrote:
> >>>
> >>> >IImageModel should perhaps define the getter/setter for sources as:
> >>> >
> >>> >function get source():Object;
> >>> >function set source(value:Object):void;
> >>> >
> >>> >instead of:
> >>> >
> >>> >function get source():String;
> >>> >function set source(value:String):void;
> >>> >
> >>> >In the Flash based implementation, we need to have the option of
> >>>setting a
> >>> >bitmap object as source as well.  I dont think that is possible with
> >>>HTML,
> >>> >though.  But keeping it generic would be beneficial for sure.
> >>> >
> >>> >Thanks,
> >>> >Om
> >>> >
> >>> >
> >>> >On Wed, Sep 11, 2013 at 8:48 AM, <p...@apache.org> wrote:
> >>> >
> >>> >> Updated Branches:
> >>> >>   refs/heads/develop a1f8929b3 -> 426c2e1eb
> >>> >>
> >>> >>
> >>> >> Changed property name from "url" to "source" to be compatible with
> >>>Flex
> >>> >> and HTML.
> >>> >>
> >>> >>
> >>> >> Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
> >>> >> Commit:
> >>> http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/426c2e1e
> >>> >> Tree:
> http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/426c2e1e
> >>> >> Diff:
> http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/426c2e1e
> >>> >>
> >>> >> Branch: refs/heads/develop
> >>> >> Commit: 426c2e1ebc17fc271b34aa856c2cfe6423240c4d
> >>> >> Parents: a1f8929
> >>> >> Author: Peter Ent <p...@apache.org>
> >>> >> Authored: Wed Sep 11 11:48:06 2013 -0400
> >>> >> Committer: Peter Ent <p...@apache.org>
> >>> >> Committed: Wed Sep 11 11:48:06 2013 -0400
> >>> >>
> >>> >>
> >>>----------------------------------------------------------------------
> >>> >>  frameworks/as/src/org/apache/flex/core/IImageModel.as   |  4 ++--
> >>> >>  .../as/src/org/apache/flex/html/staticControls/Image.as |  8
> >>>++++----
> >>> >>  .../apache/flex/html/staticControls/beads/ImageView.as  |  2 +-
> >>> >>  .../flex/html/staticControls/beads/models/ImageModel.as | 12
> >>> >>++++++------
> >>> >>  4 files changed, 13 insertions(+), 13 deletions(-)
> >>> >>
> >>>----------------------------------------------------------------------
> >>> >>
> >>> >>
> >>> >>
> >>> >>
> >>> >>
> >>>
> >>>
> http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/426c2e1e/framework
> >>>s
> >>> >>/as/src/org/apache/flex/core/IImageModel.as
> >>> >>
> >>>----------------------------------------------------------------------
> >>> >> diff --git a/frameworks/as/src/org/apache/flex/core/IImageModel.as
> >>> >> b/frameworks/as/src/org/apache/flex/core/IImageModel.as
> >>> >> index 07dfd56..dc924eb 100644
> >>> >> --- a/frameworks/as/src/org/apache/flex/core/IImageModel.as
> >>> >> +++ b/frameworks/as/src/org/apache/flex/core/IImageModel.as
> >>> >> @@ -22,7 +22,7 @@ package org.apache.flex.core
> >>> >>
> >>> >>         public interface IImageModel extends IEventDispatcher,
> >>> >>IBeadModel
> >>> >>         {
> >>> >> -               function get url():String;
> >>> >> -               function set url(value:String):void;
> >>> >> +               function get source():String;
> >>> >> +               function set source(value:String):void;
> >>> >>         }
> >>> >>  }
> >>> >> \ No newline at end of file
> >>> >>
> >>> >>
> >>> >>
> >>> >>
> >>>
> >>>
> http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/426c2e1e/framework
> >>>s
> >>> >>/as/src/org/apache/flex/html/staticControls/Image.as
> >>> >>
> >>>----------------------------------------------------------------------
> >>> >> diff --git
> >>> >> a/frameworks/as/src/org/apache/flex/html/staticControls/Image.as
> >>> >> b/frameworks/as/src/org/apache/flex/html/staticControls/Image.as
> >>> >> index 297e847..eebfe40 100644
> >>> >> --- a/frameworks/as/src/org/apache/flex/html/staticControls/Image.as
> >>> >> +++ b/frameworks/as/src/org/apache/flex/html/staticControls/Image.as
> >>> >> @@ -28,14 +28,14 @@ package org.apache.flex.html.staticControls
> >>> >>                         super();
> >>> >>                 }
> >>> >>
> >>> >> -               public function get url():String
> >>> >> +               public function get source():String
> >>> >>                 {
> >>> >> -                       return IImageModel(model).url;
> >>> >> +                       return IImageModel(model).source;
> >>> >>                 }
> >>> >>
> >>> >> -               public function set url(value:String):void
> >>> >> +               public function set source(value:String):void
> >>> >>                 {
> >>> >> -                       IImageModel(model).url = value;
> >>> >> +                       IImageModel(model).source = value;
> >>> >>                 }
> >>> >>         }
> >>> >>  }
> >>> >> \ No newline at end of file
> >>> >>
> >>> >>
> >>> >>
> >>> >>
> >>>
> >>>
> http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/426c2e1e/framework
> >>>s
> >>> >>/as/src/org/apache/flex/html/staticControls/beads/ImageView.as
> >>> >>
> >>>----------------------------------------------------------------------
> >>> >> diff --git
> >>> >>
> >>>
> >>>>>a/frameworks/as/src/org/apache/flex/html/staticControls/beads/ImageVie
> >>>>>w
> >>>>>.a
> >>> >>s
> >>> >>
> >>>
> >>>>>b/frameworks/as/src/org/apache/flex/html/staticControls/beads/ImageVie
> >>>>>w
> >>>>>.a
> >>> >>s
> >>> >> index 2fed3e6..bcb6044 100644
> >>> >> ---
> >>> >>
> >>>
> >>>>>a/frameworks/as/src/org/apache/flex/html/staticControls/beads/ImageVie
> >>>>>w
> >>>>>.a
> >>> >>s
> >>> >> +++
> >>> >>
> >>>
> >>>>>b/frameworks/as/src/org/apache/flex/html/staticControls/beads/ImageVie
> >>>>>w
> >>>>>.a
> >>> >>s
> >>> >> @@ -59,7 +59,7 @@ package org.apache.flex.html.staticControls.beads
> >>> >>                 {
> >>> >>                         loader = new Loader();
> >>> >>
> >>> >> loader.contentLoaderInfo.addEventListener("complete",onComplete);
> >>> >> -                       loader.load(new URLRequest(_model.url));
> >>> >> +                       loader.load(new URLRequest(_model.source));
> >>> >>                 }
> >>> >>
> >>> >>                 private function onComplete(event:Object):void
> >>> >>
> >>> >>
> >>> >>
> >>> >>
> >>>
> >>>
> http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/426c2e1e/framework
> >>>s
> >>>
> >>>>>/as/src/org/apache/flex/html/staticControls/beads/models/ImageModel.as
> >>> >>
> >>>----------------------------------------------------------------------
> >>> >> diff --git
> >>> >>
> >>>
> >>>>>a/frameworks/as/src/org/apache/flex/html/staticControls/beads/models/I
> >>>>>m
> >>>>>ag
> >>> >>eModel.as
> >>> >>
> >>>
> >>>>>b/frameworks/as/src/org/apache/flex/html/staticControls/beads/models/I
> >>>>>m
> >>>>>ag
> >>> >>eModel.as
> >>> >> index e5821f8..c6e3e80 100644
> >>> >> ---
> >>> >>
> >>>
> >>>>>a/frameworks/as/src/org/apache/flex/html/staticControls/beads/models/I
> >>>>>m
> >>>>>ag
> >>> >>eModel.as
> >>> >> +++
> >>> >>
> >>>
> >>>>>b/frameworks/as/src/org/apache/flex/html/staticControls/beads/models/I
> >>>>>m
> >>>>>ag
> >>> >>eModel.as
> >>> >> @@ -37,15 +37,15 @@ package
> >>> >> org.apache.flex.html.staticControls.beads.models
> >>> >>                         _strand = value;
> >>> >>                 }
> >>> >>
> >>> >> -               private var _url:String;
> >>> >> -               public function get url():String
> >>> >> +               private var _source:String;
> >>> >> +               public function get source():String
> >>> >>                 {
> >>> >> -                       return _url;
> >>> >> +                       return _source;
> >>> >>                 }
> >>> >> -               public function set url(value:String):void
> >>> >> +               public function set source(value:String):void
> >>> >>                 {
> >>> >> -                       if (value != _url) {
> >>> >> -                               _url = value;
> >>> >> +                       if (value != _source) {
> >>> >> +                               _source = value;
> >>> >>                                 dispatchEvent( new
> >>>Event("urlChanged")
> >>> >>);
> >>> >>                         }
> >>> >>                 }
> >>> >>
> >>> >>
> >>>
> >>>
> >
>
>

Reply via email to