|
@@ -25,14 +25,18 @@ directive('model', (el, { value, modifiers, expression }, { effect, cleanup }) =
|
|
|
}})
|
|
|
})
|
|
|
|
|
|
+ // Register the listener removal callback on the element, so that
|
|
|
+ // in addition to the cleanup function, x-modelable may call it.
|
|
|
if (! el._x_removeModelListeners) el._x_removeModelListeners = {}
|
|
|
+
|
|
|
el._x_removeModelListeners[value || 'default'] = removeListener
|
|
|
|
|
|
cleanup(() => el._x_removeModelListeners[value || 'default']())
|
|
|
|
|
|
// Allow programmatic overiding of x-model.
|
|
|
let evaluateSetModel = evaluateLater(el, `${expression} = __placeholder`)
|
|
|
- let obj = {
|
|
|
+
|
|
|
+ let modelObject = {
|
|
|
get() {
|
|
|
let result
|
|
|
evaluate(value => result = value)
|
|
@@ -43,12 +47,13 @@ directive('model', (el, { value, modifiers, expression }, { effect, cleanup }) =
|
|
|
},
|
|
|
}
|
|
|
|
|
|
- // This is a "named" binding (x-model:name).
|
|
|
if (value) {
|
|
|
+ // This is a "named" binding (x-model:name).
|
|
|
if (! el._x_models) el._x_models = {}
|
|
|
- el._x_models[value] = obj
|
|
|
+ el._x_models[value] = modelObject
|
|
|
} else {
|
|
|
- el._x_model = obj
|
|
|
+ // This is a "normal" binding (x-model).
|
|
|
+ el._x_model = modelObject
|
|
|
}
|
|
|
|
|
|
el._x_forceModelUpdate = () => {
|