From 49c99edf254d3102feae8e1cac6f9edb292b109c Mon Sep 17 00:00:00 2001 From: Jeroen Date: Wed, 20 Apr 2016 16:59:11 +0200 Subject: [PATCH] fix(templating-engine): allow for overrideContext in enhance --- src/templating-engine.js | 6 ++++- test/templating-engine.spec.js | 47 ++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 test/templating-engine.spec.js diff --git a/src/templating-engine.js b/src/templating-engine.js index b55d625b..91217e48 100644 --- a/src/templating-engine.js +++ b/src/templating-engine.js @@ -30,6 +30,10 @@ interface EnhanceInstruction { * A binding context for the enhancement. */ bindingContext?: Object; + /** + * A secondary binding context that can override the standard context. + */ + overrideContext?: any; } /** @@ -91,7 +95,7 @@ export class TemplatingEngine { let container = instruction.container || this._container.createChild(); let view = factory.create(container, BehaviorInstruction.enhance()); - view.bind(instruction.bindingContext || {}); + view.bind(instruction.bindingContext || {}, instruction.overrideContext); return view; } diff --git a/test/templating-engine.spec.js b/test/templating-engine.spec.js new file mode 100644 index 00000000..54402c1e --- /dev/null +++ b/test/templating-engine.spec.js @@ -0,0 +1,47 @@ +import './setup'; +import {Container} from 'aurelia-dependency-injection'; +import {TemplatingEngine} from '../src/templating-engine'; +import {ViewResources} from '../src/view-resources'; +import {DOM} from 'aurelia-pal'; + +describe('enhance', () => { + let container; + let element; + let templatingEngine; + + beforeEach(() => { + container = new Container(); + element = DOM.createElement('div'); + templatingEngine = container.get(TemplatingEngine); + }); + + it('passes bindingContext and overrideContext to .bind()', () => { + let bindingContext = { some: 'var' }; + let overrideContext = { foo: 'bar' }; + + let view = templatingEngine.enhance({ + element: element, + bindingContext: bindingContext, + overrideContext: overrideContext + }); + + expect(view.bindingContext).toBe(bindingContext); + expect(view.overrideContext).toBe(overrideContext); + expect(view.bindingContext.some).toBe('var'); + expect(view.overrideContext.foo).toBe('bar'); + }); + + it('supports passing of ViewResources to the view-compiler', () => { + let compileNodeSpy = spyOn(templatingEngine._viewCompiler, '_compileNode'); + let resources = new ViewResources(); + + templatingEngine.enhance({ + element: element, + resources: resources + }); + + let r = compileNodeSpy.calls.argsFor(0)[1]; + + expect(r).toBe(resources); + }); +});