You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Currently one can't really easily iterate over the result of a Promise.
I am in a situation where I an array of Files and I need to extract their dimensions to be able to use http://photoswipe.com. Extracting those information is however an asynchronous task as one need to have the image loaded to get its dimension.
I wrote a ValueConverter that takes an array of Files and return a Promise containing the same list of Files with metadata. But I then needed to iterate over this Promise. It took me some time before I figured out what was the best way to do so.
I first tried with an asynchronous BindingBehavior. It worked when I was assigning a new array, but not when I was removing an item from the array. I could then get it to work by removing the item from a clone of my array and reassigning it to the original, but I didn't find it very elegant.
I then read about these RepeatStrategies and thought it would be a nice way to solve my problem. I then wrote a strategy for Promises that is just a wrapper to other already existing strategies:
import{Repeat,RepeatStrategyLocator}from'aurelia-templating-resources';exportclassPromiseRepeatStrategy{constructor(privaterepeatStrategyLocator: RepeatStrategyLocator){}instanceChanged(repeat: Repeat,promise: any): void{promise.then((items)=>{conststrategy=this.repeatStrategyLocator.getStrategy(items);if(!strategy){thrownewError('Value for \''+items+'\' is non-repeatable');}strategy.instanceChanged(repeat,items);});}instanceMutated(repeat: Repeat,promise: any,changes: any): void{promise.then((items)=>{conststrategy=this.repeatStrategyLocator.getStrategy(items);if(!strategy){thrownewError('Value for \''+items+'\' is non-repeatable');}strategy.instanceMutated(repeat,items,changes);});}getCollectionObserver(observerLocator: any,items: any): any{}}
I'm submitting a feature request
1.4.0
Current behavior:
Currently one can't really easily iterate over the result of a Promise.
I am in a situation where I an array of Files and I need to extract their dimensions to be able to use http://photoswipe.com. Extracting those information is however an asynchronous task as one need to have the image loaded to get its dimension.
I wrote a ValueConverter that takes an array of Files and return a Promise containing the same list of Files with metadata. But I then needed to iterate over this Promise. It took me some time before I figured out what was the best way to do so.
I first tried with an asynchronous BindingBehavior. It worked when I was assigning a new array, but not when I was removing an item from the array. I could then get it to work by removing the item from a clone of my array and reassigning it to the original, but I didn't find it very elegant.
I then read about these RepeatStrategies and thought it would be a nice way to solve my problem. I then wrote a strategy for Promises that is just a wrapper to other already existing strategies:
Then its registration
I thought it could help one facing the same problem and would be nice to have it directly native in the library.
The text was updated successfully, but these errors were encountered: