|
@@ -4,7 +4,7 @@ import { mutateDom } from '../mutation'
|
|
|
import bind from '../utils/bind'
|
|
|
import on from '../utils/on'
|
|
|
|
|
|
-directive('model', (el, { modifiers, expression }, { effect, cleanup }) => {
|
|
|
+directive('model', (el, { value, modifiers, expression }, { effect, cleanup }) => {
|
|
|
let evaluate = evaluateLater(el, expression)
|
|
|
let assignmentExpression = `${expression} = rightSideOfExpression($event, ${expression})`
|
|
|
let evaluateAssignment = evaluateLater(el, assignmentExpression)
|
|
@@ -25,11 +25,14 @@ directive('model', (el, { modifiers, expression }, { effect, cleanup }) => {
|
|
|
}})
|
|
|
})
|
|
|
|
|
|
- cleanup(() => removeListener())
|
|
|
+ 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`)
|
|
|
- el._x_model = {
|
|
|
+ let obj = {
|
|
|
get() {
|
|
|
let result
|
|
|
evaluate(value => result = value)
|
|
@@ -40,6 +43,14 @@ directive('model', (el, { modifiers, expression }, { effect, cleanup }) => {
|
|
|
},
|
|
|
}
|
|
|
|
|
|
+ // This is a "named" binding (x-model:name).
|
|
|
+ if (value) {
|
|
|
+ if (! el._x_models) el._x_models = {}
|
|
|
+ el._x_models[value] = obj
|
|
|
+ } else {
|
|
|
+ el._x_model = obj
|
|
|
+ }
|
|
|
+
|
|
|
el._x_forceModelUpdate = () => {
|
|
|
evaluate(value => {
|
|
|
// If nested model key is undefined, set the default value to empty string.
|