Merge pull request #4006 from ThomasMichon/knockout-projections

Add support for dispose callbacks in knockout.projections library
This commit is contained in:
John Reilly
2015-04-02 17:07:25 +01:00
2 changed files with 52 additions and 3 deletions
@@ -26,3 +26,39 @@ sourceItems.push(9);
sourceItems.push(10);
// evenSquares now contains [36, 16, 4, 100]
// Testing mapping options
interface IComplexItem {
value: string;
dispose(): void;
}
var complexItems = sourceItems.map({
mapping: x => {
var item: IComplexItem = {
value: (x * x).toString(),
dispose: () => { }
};
return item;
},
disposeItem: (item: IComplexItem) => item.dispose()
});
var complexItems2 = sourceItems.map({
mappingWithDisposeCallback: x => {
return {
mappedValue: (x * x).toString(),
dispose: () => { }
};
}
});
// Test disposal
evenSquares.dispose();
complexItems.dispose();
complexItems2.dispose();
+16 -3
View File
@@ -5,8 +5,21 @@
/// <reference path="../knockout/knockout.d.ts" />
interface KnockoutMappedObservableArray<T> extends KnockoutObservableArray<T>, KnockoutSubscription {
}
interface KnockoutObservableArrayFunctions<T> {
map<TResult>(mapping: (value: T) => TResult): KnockoutObservableArray<TResult>;
filter(predicate: (value: T) => boolean): KnockoutObservableArray<T>;
map<TResult>(mappingOptions: {
mappingWithDisposeCallback: (value: T) => {
mappedValue: TResult;
dispose: () => void;
};
}): KnockoutMappedObservableArray<TResult>;
map<TResult>(mappingOptions: {
mapping: (value: T) => TResult;
disposeItem?: (mappedItem: TResult) => void;
}): KnockoutMappedObservableArray<TResult>;
map<TResult>(mappingOptions: (value: T) => TResult): KnockoutMappedObservableArray<TResult>;
filter(predicate: (value: T) => boolean): KnockoutMappedObservableArray<T>;
}