Note that there are some explanatory texts on larger screens.

plurals
  1. POSimplify AS3 binding/event-dispatching code
    text
    copied!<p>There are 3 properties (example 1):</p> <pre><code>[Bindable] public var name:String; [Bindable] public var email:Number; [Bindable] public var address:Boolean; </code></pre> <p>I needed to have 3 helper methods that will be bindable too (example 2):</p> <pre><code>[Bindable] public var name:String; [Bindable] public var email:Number; [Bindable] public var address:Boolean; public function get nameIsOk():Boolean { return !Strings.isEmpty(name) } public function get emailIsOk():Boolean { return email == 3 } public function get addressIsOk():Boolean { return address } </code></pre> <p>Sure, the code above doesn't work. I made it work by doing this (example 3):</p> <pre><code>private var _name:String [Bindable("nameChanged")] public function get name():String { return _name } public function set name(v:String):void { _name = v; dispatchEvent(new Event("nameChanged")) } [Bindable("nameChanged")] public function get nameIsOk():Boolean { return !Strings.isEmpty(name) } private var _email:Number [Bindable("emailChanged")] public function get email():Number { return _email } public function set email(v:Number):void { _email = v; dispatchEvent(new Event("emailChanged")) } [Bindable("emailChanged")] public function get emailIsOk():Boolean { return email == 3 } private var _address:Boolean [Bindable("addressChanged")] public function get address():Boolean { return _address } public function set address(v:Boolean):void { _address = v; dispatchEvent(new Event("addressChanged")) } [Bindable("addressChanged")] public function get addressIsOk():Boolean { return address } </code></pre> <p>It does work, but now it is bloated.</p> <p>Is there a way to reduce this code (example 3) to something smaller (like example 2)?</p> <p><strong>UPDATE:</strong> Kudos to just_a_dude for nice answer. Here is the final version:</p> <pre><code>[Bindable] public var name:String; [Bindable] public var email:Number; [Bindable] public var address:Boolean; public function Remixer() { for each (var f:String in Strings.split("name email address")) { ChangeWatcher.watch(this, f, onChange) } } private function onChange(e:PropertyChangeEvent):void { dispatchEvent(new Event(e.property + "Changed")) } [Bindable("nameChanged")] public function get nameIsOk():Boolean { return !Strings.isEmpty(name) } [Bindable("emailChanged")] public function get emailIsOk():Boolean { return email == 3 } [Bindable("addressChanged")] public function get addressIsOk():Boolean { return address } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload