-
Notifications
You must be signed in to change notification settings - Fork 79
/
knockback_default_wrapper.coffee
39 lines (32 loc) · 1.51 KB
/
knockback_default_wrapper.coffee
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
###
knockback_default_wrapper.js
(c) 2011 Kevin Malakoff.
Knockback.DefaultWrapper is freely distributable under the MIT license.
See the following for full license details:
https://github.com/kmalakoff/knockback/blob/master/LICENSE
###
throw new Error('Knockback: Dependency alert! knockback_core.js must be included before this file') if not this.Knockback
######################################
# Knockback.defaultWrapper to provide a default value when an observable is null, undefined, or the empty string
# Provide a observable with observable and/or non observable default argument in the form of:
# kb.defaultWrapper(some_observable, "blue")
######################################
class Knockback.DefaultWrapper
constructor: (observable, @default_value) ->
_.bindAll(this, 'destroy', 'setToDefault')
@_kb_observable = ko.dependentObservable({
read: =>
value = ko.utils.unwrapObservable(observable())
return if not value then ko.utils.unwrapObservable(@default_value) else value
write: (value) -> observable(value)
owner: {}
})
# publish public interface on the observable and return instead of this
@_kb_observable.destroy = @destroy
@_kb_observable.setToDefault = @setToDefault
return kb.wrappedObservable(this)
destroy: ->
@_kb_observable = null
@default_value = null
setToDefault: -> @_kb_observable(@default_value)
Knockback.defaultWrapper = (observable, default_value) -> return new Knockback.DefaultWrapper(observable, default_value)