Hi,

I spend the last few days creating a proof-of-concept that FlexJS and the
Falcon compiler can support limited "live" editing of MXML.  I've never
used Design View in FB, but when tweaking the UI for Flex apps, I often
find myself in a cycle of:  edit some values in the mxml, save it, reload
the app, make more edits, etc.  Each time, the app has to be reloaded to
see the changes.  "Live" editing allows you to see certain changes without
reloading the app.  The POC handles a few scenarios that involve MXML
states.

It is kind of hard to demo, but I think these are the steps:

0. Download Apache FlexJS 0.5.0 (or the 0.6.0 nightly) and install it as
an SDK in FB.
1. Download this FB project:
http://home.apache.org/~aharui/MXMLLiveEditing/DataBindingTest.fxp
2. Download this FB project:
http://home.apache.org/~aharui/MXMLLiveEditing/MXMLLiveEditAgent.fxp

3. Import both projects into FB.
4. Run MXMLLiveEditAgent.
5. In the MXMLLiveEditAgent UI, select the MyInitialView.mxml file from
the DataBindingTest project.
6. Hit the Watch button.
7. Run DataBindingTest.
8. Make and save a change to MyInitialView.mxml

When the file is saved, a few seconds later, the changes should be
reflected in DataBindingTest.  This POC has a white list of properties, so
you can edit width, height, x, y, label, text and style properties.  And
you can edit state-bound properties like height.showAll in the TextArea
tag.

Remember that styles in FlexJS are like HTML styles, so you can add, for
example, style="marginLeft:90" to one of the tags.

This is just for tweaking the visuals of your app.  You can't edit binding
expressions or event handlers or add or remove new components.  If you do
the POC will fail.  A more robust version would probably detect such
changes and tell you to refresh the app.  Also, if you save illegal XML,
the POC will fail.  A more robust version would also watch the output SWF
to see if it changes in order to know the MXML edit didn't have syntax
errors.

The way this works is that there is a plugin added to MyInitialView that
communicates with the MXMLLiveEditAgent.  The MXMLLiveEditAgent is
monitoring the last-modified date on the file.  When it changes, it loads
the MXML and compares it to the last copy and transmits changes to the
plugin that applies them to the app.  Certain scenarios like state-bound
properties and state-bound components can be handled in because the Falcon
compiler converts a lot of the MXML into data structures that the plugin
can find and modify.  It isn't clear that you could do this in the regular
Flex SDK without finishing up Falcon compiler support in the regular Flex
SDK.

Also, none of this really requires FB.  You can unzip the FXP files, build
everything yourself and edit the MXML with a text editor and it still all
works.

Future work (hopefully by other volunteers) would be to handle changes to
CSS syntax, watch multiple files at once, and swap out the LocalConnection
to use sockets so you could "live" edit an mobile app on a device, or have
an IDE communicate directly with the running app.

Anyway, let me know what you think.  I'm off to work on other things.

Thanks,
-Alex

Reply via email to