From 1dd12f188e112d62d47e6ffb8c648a23d2a55a95 Mon Sep 17 00:00:00 2001 From: bolkhovsky Date: Mon, 23 Jun 2014 17:17:08 +0400 Subject: [PATCH 1/4] add KnockoutBindingAccessor interface to extend custom bindings API definition --- knockout/knockout.d.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/knockout/knockout.d.ts b/knockout/knockout.d.ts index 9c4e02bd8..512a6a305 100644 --- a/knockout/knockout.d.ts +++ b/knockout/knockout.d.ts @@ -123,9 +123,14 @@ interface KnockoutBindingContext { createChildContext(dataItemOrAccessor: any, dataItemAlias?: any, extendCallback?: Function): any; } +interface KnockoutBindingAccessor { + get(name: string): any; + has(name: string): boolean; +} + interface KnockoutBindingHandler { - init?(element: any, valueAccessor: () => any, allBindingsAccessor: () => any, viewModel: any, bindingContext: KnockoutBindingContext): void; - update?(element: any, valueAccessor: () => any, allBindingsAccessor: () => any, viewModel: any, bindingContext: KnockoutBindingContext): void; + init? (element: any, valueAccessor: () => any, allBindingsAccessor: KnockoutBindingAccessor, viewModel: any, bindingContext: KnockoutBindingContext): void; + update? (element: any, valueAccessor: () => any, allBindingsAccessor: KnockoutBindingAccessor, viewModel: any, bindingContext: KnockoutBindingContext): void; options?: any; } From e7a6ee50c2b6a622841f6708ab9c36357159f44d Mon Sep 17 00:00:00 2001 From: bolkhovsky Date: Mon, 23 Jun 2014 17:47:43 +0400 Subject: [PATCH 2/4] fix definition to support dynamic binding property access --- knockout/knockout.d.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/knockout/knockout.d.ts b/knockout/knockout.d.ts index 512a6a305..006b83361 100644 --- a/knockout/knockout.d.ts +++ b/knockout/knockout.d.ts @@ -124,6 +124,7 @@ interface KnockoutBindingContext { } interface KnockoutBindingAccessor { + (): any; get(name: string): any; has(name: string): boolean; } From 361ce9e2f34e4ea805553a41ec80b2d5d545d679 Mon Sep 17 00:00:00 2001 From: bolkhovsky Date: Tue, 24 Jun 2014 00:28:16 +0400 Subject: [PATCH 3/4] change interface name to historical (4 days earlier) version --- knockout/knockout.d.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/knockout/knockout.d.ts b/knockout/knockout.d.ts index 006b83361..0c57d2ad9 100644 --- a/knockout/knockout.d.ts +++ b/knockout/knockout.d.ts @@ -123,15 +123,15 @@ interface KnockoutBindingContext { createChildContext(dataItemOrAccessor: any, dataItemAlias?: any, extendCallback?: Function): any; } -interface KnockoutBindingAccessor { +interface KnockoutAllBindingsAccessor { (): any; get(name: string): any; has(name: string): boolean; } interface KnockoutBindingHandler { - init? (element: any, valueAccessor: () => any, allBindingsAccessor: KnockoutBindingAccessor, viewModel: any, bindingContext: KnockoutBindingContext): void; - update? (element: any, valueAccessor: () => any, allBindingsAccessor: KnockoutBindingAccessor, viewModel: any, bindingContext: KnockoutBindingContext): void; + init? (element: any, valueAccessor: () => any, allBindingsAccessor: KnockoutAllBindingsAccessor, viewModel: any, bindingContext: KnockoutBindingContext): void; + update? (element: any, valueAccessor: () => any, allBindingsAccessor: KnockoutAllBindingsAccessor, viewModel: any, bindingContext: KnockoutBindingContext): void; options?: any; } From d1db936207c9b28d1bdff5a081d1f0ac1b94975b Mon Sep 17 00:00:00 2001 From: bolkhovsky Date: Tue, 24 Jun 2014 00:32:47 +0400 Subject: [PATCH 4/4] extend tests for KnockoutAllBindingsAccessor --- knockout/tests/knockout-tests.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/knockout/tests/knockout-tests.ts b/knockout/tests/knockout-tests.ts index da5d1e65a..6d4c9e25d 100644 --- a/knockout/tests/knockout-tests.ts +++ b/knockout/tests/knockout-tests.ts @@ -591,11 +591,15 @@ function test_allBindingsAccessor() { ko.bindingHandlers.allBindingsAccessorTest = { init: (element: any, valueAccessor: () => any, allBindingsAccessor: KnockoutAllBindingsAccessor, viewModel: any, bindingContext: KnockoutBindingContext) => { var allBindings = allBindingsAccessor(); + var hasBinding = allBindingsAccessor.has("myBindingName"); var myBinding = allBindingsAccessor.get("myBindingName"); + var fnAccessorBinding = allBindingsAccessor().myBindingName; }, update: (element: any, valueAccessor: () => any, allBindingsAccessor: KnockoutAllBindingsAccessor, viewModel: any, bindingContext: KnockoutBindingContext) => { var allBindings = allBindingsAccessor(); + var hasBinding = allBindingsAccessor.has("myBindingName"); var myBinding = allBindingsAccessor.get("myBindingName"); + var fnAccessorBinding = allBindingsAccessor().myBindingName; } }; } \ No newline at end of file