actionscript 3 - Bidirectional binding for flex ComboBox? -
i have collection want bind data input combobox:
private static var logos:arraycollection = new arraycollection([ {index:0, label=logo1}, {index:1, label=logo2} ]); <s:combobox selecteditem="@{model.labelindex}" labelfield="@label" dataprovider="{logos}" /> now, when selecting item, binding should send associated index property of objext model , update labelindex. of course not work above, because labelindex of different datatype arraycollection.
[bindable] private var model:mymodel; [bindable] class mymodel { public var:number labelindex; } question: how can map array element model , vice versa?
what looking require scripting, binding isn't smart enough figure out how handle on own.
you can use bindingutils class define bindings, , use chain argument of bindproperty method modify how values being looked up.
for combo.selecteditem model.labelindex binding, can specify chain array, elements define path value:
bindingutils.bindproperty(model, 'labelindex', combo, ['selecteditem', 'index']); this bind selecteditem property, , pass value of items index property.
the other way around little more tricky , require using getter function grabs object datasource, based on labelindex value:
bindingutils.bindproperty(combo, 'selecteditem', model, { name: 'labelindex', getter: function(host:mymodel):object { return logos.source.filter(function(item:object, index:int, array:array):boolean { return item.index === host.labelindex; })[0]; } }); this bind labelindex property, , getter function invoked when property changes. function filter datasource based on models changed labelindex property value, , return source object matching index property value, set combobox selecteditem property.
your combobox definition of course need id in order targetable via script
<s:combobox id="combo" dataprovider="{logos}" /> note there's no need forthe @ in labelfield property, used xml datasources need target attribute. however, don't need specify @ all, since label default value of labelfield property.
Comments
Post a Comment