Skip to content

Commit

Permalink
feat(signal): enable signaling one-time bindings
Browse files Browse the repository at this point in the history
fixes #176
  • Loading branch information
jdanyow committed Jan 6, 2016
1 parent a3956a3 commit 24ce672
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 5 deletions.
3 changes: 0 additions & 3 deletions src/signal-binding-behavior.js
Expand Up @@ -13,9 +13,6 @@ export class SignalBindingBehavior {
if (!binding.updateTarget) {
throw new Error('Only property bindings and string interpolation bindings can be signaled. Trigger, delegate and call bindings cannot be signaled.');
}
if (binding.mode === bindingMode.oneTime) {
throw new Error('One-time bindings cannot be signaled.');
}
let bindings = this.signals[name] || (this.signals[name] = []);
bindings.push(binding);
binding.signalName = name;
Expand Down
18 changes: 16 additions & 2 deletions test/signal-binding-behavior.spec.js
Expand Up @@ -29,13 +29,13 @@ describe('SignalBindingBehavior', () => {
bindingSignaler = container.get(BindingSignaler);
});

it('should throw in one-time binding', () => {
it('should not throw in one-time binding', () => {
let source = {};
let scope = createScopeForTest(source);
let target = document.createElement('input');
let bindingExpression = bindingEngine.createBindingExpression('value', `'foo' & signal:'test'`, bindingMode.oneTime, lookupFunctions);
let binding = bindingExpression.createBinding(target);
expect(() => binding.bind(scope)).toThrow();
expect(() => binding.bind(scope)).not.toThrow();
});

it('should signal binding', () => {
Expand All @@ -52,6 +52,20 @@ describe('SignalBindingBehavior', () => {
expect(target.value).toBe(converterResult);
});

it('should signal one-time binding', () => {
let source = { updateDateTime: new Date() };
let scope = createScopeForTest(source);
let target = document.createElement('input');
let bindingExpression = bindingEngine.createBindingExpression('value', `updateDateTime | testConverter & signal:'test'`, bindingMode.oneTime, lookupFunctions);
let binding = bindingExpression.createBinding(target);
converterResult = 'hello';
binding.bind(scope);
expect(target.value).toBe(converterResult);
converterResult = 'world';
bindingSignaler.signal('test');
expect(target.value).toBe(converterResult);
});

it('should signal interpolation binding', () => {
let source = { updateDateTime: new Date() };
let scope = createScopeForTest(source);
Expand Down

0 comments on commit 24ce672

Please sign in to comment.