milojs/milo-core

View on GitHub
lib/model/synthesize/setter.dot.js

Summary

Maintainability
A
0 mins
Test Coverage
'use strict';
/* Only use this style of comments, not "//" */

{{# def.include_defines }}
{{# def.include_create_tree }}


/**
 * Template that synthesizes setter for Model and for ModelPath
 */
return function set(value) {
    {{# def.initVars:'set' }}

    {{# def.createTree:'set' }}

    {{
        currNode = nextNode;
        currProp = currNode && currNode.property;
    }}

    {{ /* assign value to the last property */ }}
    {{? currProp }}
        wasDef = {{# def.wasDefined}};
        {{# def.changeAccessPath }}

        var old = m{{# def.currProp }};

        {{ /* clone value to prevent same reference in linked models */ }}
        m{{# def.currProp }} = cloneTree(value);
    {{?}}

    {{ /* add message related to the last property change */ }}
    if (this._options.reactive !== false) {
        if (! wasDef)
            {{# def.addMsg }} accessPath, type: 'added',
                newValue: value });
        else if (old != value)
            {{# def.addMsg }} accessPath, type: 'changed',
                oldValue: old, newValue: value });

        {{ /* add message related to changes in (sub)properties inside removed and assigned value */ }}
        if (! wasDef || old != value)
            addTreeChangesMessages(messages, messagesHash,
                accessPath, old, value); /* defined in the function that synthesizes ModelPath setter */

        {{ /* post all stored messages */ }}
        {{# def.postMessages }}
    }
};