fb1984a9 by Michael Richards

Merge branch 'model-as-context-on-function-calls'

2 parents 44468934 1594f8c0
...@@ -85,6 +85,13 @@ describe('Rivets.Binding', function() { ...@@ -85,6 +85,13 @@ describe('Rivets.Binding', function() {
85 expect(binding.routine).toHaveBeenCalledWith(el, 'awesome sweater'); 85 expect(binding.routine).toHaveBeenCalledWith(el, 'awesome sweater');
86 }); 86 });
87 87
88 it('calls methods with the object as context', function() {
89 binding.model = {foo: 'bar'};
90 spyOn(binding, 'routine');
91 binding.set(function() { return this.foo; });
92 expect(binding.routine).toHaveBeenCalledWith(el, binding.model.foo);
93 });
94
88 describe('on an event binding', function() { 95 describe('on an event binding', function() {
89 beforeEach(function() { 96 beforeEach(function() {
90 binding.options.special = 'event'; 97 binding.options.special = 'event';
...@@ -110,19 +117,19 @@ describe('Rivets.Binding', function() { ...@@ -110,19 +117,19 @@ describe('Rivets.Binding', function() {
110 }); 117 });
111 }); 118 });
112 }); 119 });
113 120
114 describe('publish()', function() { 121 describe('publish()', function() {
115 it("should publish the value of a number input", function() { 122 it("should publish the value of a number input", function() {
116 numberInput = document.createElement('input'); 123 numberInput = document.createElement('input');
117 numberInput.setAttribute('type', 'number'); 124 numberInput.setAttribute('type', 'number');
118 numberInput.setAttribute('data-value', 'obj.num'); 125 numberInput.setAttribute('data-value', 'obj.num');
119 126
120 view = rivets.bind(numberInput, {obj: {num: 42}}); 127 view = rivets.bind(numberInput, {obj: {num: 42}});
121 binding = view.bindings[0]; 128 binding = view.bindings[0];
122 model = binding.model; 129 model = binding.model;
123 130
124 numberInput.value = 42; 131 numberInput.value = 42;
125 132
126 spyOn(rivets.config.adapter, 'publish'); 133 spyOn(rivets.config.adapter, 'publish');
127 binding.publish({target: numberInput}); 134 binding.publish({target: numberInput});
128 expect(rivets.config.adapter.publish).toHaveBeenCalledWith(model, 'num', '42'); 135 expect(rivets.config.adapter.publish).toHaveBeenCalledWith(model, 'num', '42');
...@@ -135,7 +142,7 @@ describe('Rivets.Binding', function() { ...@@ -135,7 +142,7 @@ describe('Rivets.Binding', function() {
135 binding.formatters.push('awesome'); 142 binding.formatters.push('awesome');
136 expect(binding.formattedValue('hat')).toBe('awesome hat'); 143 expect(binding.formattedValue('hat')).toBe('awesome hat');
137 }); 144 });
138 145
139 it('uses formatters on the model', function() { 146 it('uses formatters on the model', function() {
140 model.modelAwesome = function(value) { return 'model awesome ' + value }; 147 model.modelAwesome = function(value) { return 'model awesome ' + value };
141 binding.formatters.push('modelAwesome'); 148 binding.formatters.push('modelAwesome');
...@@ -149,7 +156,7 @@ describe('Rivets.Binding', function() { ...@@ -149,7 +156,7 @@ describe('Rivets.Binding', function() {
149 }; 156 };
150 binding.formatters.push('awesome super'); 157 binding.formatters.push('awesome super');
151 }); 158 });
152 159
153 it('applies the formatter with arguments', function() { 160 it('applies the formatter with arguments', function() {
154 expect(binding.formattedValue('jacket')).toBe('super awesome jacket'); 161 expect(binding.formattedValue('jacket')).toBe('super awesome jacket');
155 }); 162 });
......
...@@ -48,7 +48,7 @@ class Rivets.Binding ...@@ -48,7 +48,7 @@ class Rivets.Binding
48 @routine @el, value, @currentListener 48 @routine @el, value, @currentListener
49 @currentListener = value 49 @currentListener = value
50 else 50 else
51 value = value() if value instanceof Function 51 value = value.call(@model) if value instanceof Function
52 @routine @el, value 52 @routine @el, value
53 53
54 # Subscribes to the model for changes at the specified keypath. Bi-directional 54 # Subscribes to the model for changes at the specified keypath. Bi-directional
......