@@ -25,6 +25,23 @@ angular.module('forms', ['blimpKit', 'platformView', 'platformLocale', 'platform
2525})).constant('Dialogs', new DialogHub()).controller('FormController', ($scope, $http, Dialogs, LocaleService, ViewParameters) => {
2626 $scope._is_view = ViewParameters.get().container !== undefined;
2727 $scope._stepIndicators = {};
28+ ${dollar}scope._setDeepModel = (path, value) => {
29+ const keys = path.split('.');
30+ let current = $scope.model;
31+
32+ keys.forEach((key, index) => {
33+ if (index === keys.length - 1) {
34+ current[key] = value;
35+ } else {
36+ if (current[key] === null || current[key] === undefined) {
37+ current[key] = {};
38+ } else if (typeof current[key] !== 'object') {
39+ throw new Error(`${key} is not an object! Cannot set inner keys.`);
40+ }
41+ current = current[key];
42+ }
43+ });
44+ };
2845 ${dollar}scope._selectFromDocuments = (modelKey, multiple, uploadEnabled) => {
2946 Dialogs.showWindow({id: 'documentStorage', params: { readOnly: !uploadEnabled, multiple: multiple, topic: '${projectName}.doc.select' } });
3047 const docSelectListener = Dialogs.addMessageListener({
@@ -39,13 +56,13 @@ angular.module('forms', ['blimpKit', 'platformView', 'platformLocale', 'platform
3956 }
4057 });
4158 };
42- $scope.forms = {
59+ ${dollar} scope.forms = {
4360 form: {}
4461 };
4562#if($metadata.url)
46- $scope._submit = () => {
63+ ${dollar} scope._submit = () => {
4764 const payload = {};
48- angular.forEach($scope.forms.form, (control, name) => {
65+ angular.forEach(${dollar} scope.forms.form, (control, name) => {
4966 if (name[0] === '$') return;
5067 payload[name] = control.$modelValue;
5168 });
@@ -79,7 +96,7 @@ angular.module('forms', ['blimpKit', 'platformView', 'platformLocale', 'platform
7996 };
8097#end
8198
82- $scope.model = {};
99+ ${dollar} scope.model = {};
83100#macro(formWidgets $elements)
84101#foreach($element in $elements)
85102 #if($element.controlId == "stepIndicator" && $element.staticData)
@@ -103,44 +120,44 @@ angular.module('forms', ['blimpKit', 'platformView', 'platformLocale', 'platform
103120 );
104121 });
105122 #elseif($element.controlId == "input-number")
106- $scope.model. $element.model = 0 ;
123+ ${dollar} scope._setDeepModel(' $element.model', 0) ;
107124 #elseif($element.controlId == "input-checkbox")
108- $scope.model. $element.model = false;
125+ ${dollar} scope._setDeepModel(' $element.model', false) ;
109126 #elseif($element.controlId == "input-radio")
110127 #set ($hasDefault = false)
111128 #if ($element.staticOptions)
112129 #foreach($radio in $element.staticOptions)
113130 #if ($radio.isDefault == true)
114131 #set ($hasDefault = true)
115- $scope.model. $element.model = '$radio.value';
132+ ${dollar} scope._setDeepModel(' $element.model', '$radio.value') ;
116133 #break
117134 #end
118135 #end
119136 #end
120137 #if (!$hasDefault)
121- $scope.model. $element.model = '' ;
138+ ${dollar} scope._setDeepModel(' $element.model', '') ;
122139 #end
123140 #elseif($element.controlId == "input-select")
124141 #set ($hasDefault = false)
125142 #if ($element.staticOptions)
126143 #foreach($select in $element.staticOptions)
127144 #if ($select.isDefault == true)
128145 #set ($hasDefault = true)
129- $scope.model. $element.model = '$select.value';
146+ ${dollar} scope._setDeepModel(' $element.model', '$select.value') ;
130147 #break
131148 #end
132149 #end
133150 #end
134151 #if (!$hasDefault)
135- $scope.model. $element.model = '' ;
152+ ${dollar} scope._setDeepModel(' $element.model', '') ;
136153 #end
137154 #elseif($element.controlId == "input-color")
138- $scope.model. $element.model = '#ffbe6f';
155+ ${dollar} scope._setDeepModel(' $element.model', '#ffbe6f') ;
139156 #elseif($element.controlId == "paragraph")
140157 #if($element.model && $element.text)
141- $scope.model. $element.model = `$element.text`;
158+ ${dollar} scope._setDeepModel(' $element.model', `$element.text`) ;
142159 #elseif($element.model)
143- $scope.model. $element.model = null;
160+ ${dollar} scope._setDeepModel(' $element.model', null) ;
144161 #end
145162 #end
146163 #if($element.children)
@@ -158,15 +175,15 @@ $code
158175 ${dollar}http.get(`$feed.url`).then(response => {
159176 #if($feed.func)
160177 #if($feed.name == 'model')
161- Object.assign($scope.model, ${feed.func}(response.data));
178+ Object.assign(${dollar} scope.model, ${feed.func}(response.data));
162179 #else
163- $scope.$feed.name = ${feed.func}(response.data);
180+ ${dollar} scope.$feed.name = ${feed.func}(response.data);
164181 #end
165182 #else
166183 #if($feed.name == 'model')
167- Object.assign($scope.model, response.data);
184+ Object.assign(${dollar} scope.model, response.data);
168185 #else
169- $scope.$feed.name = response.data;
186+ ${dollar} scope.$feed.name = response.data;
170187 #end
171188 #end
172189 }, error => {
0 commit comments