在自定义 Umbraco 数据类型中加载 $scope.model.value 时格式错误 JSON
Malformed JSON when loading $scope.model.value in custom Umbraco data type
我偶尔会注意到 Umbraco 初始化我的数据类型 $scope.model.value
值的数据中的奇怪行为。
我正在使用 Umbraco 7.11.1,我的自定义数据类型是围绕基于复杂 JSON 的数据模型构建的。
在 "Save and Publish" 期间(来自 Umbraco 后台),Umbraco 似乎接受了我的控制器存储在 $scope.model.value
中的 JSON - 没有显示错误对话框,控制台错误记录等
然而,当后台重新加载时,Umbraco 尝试使用部分的、格式错误的 JSON 字符串来初始化我的数据类型,而不是预期的 JSON 对象(即之前保存的对象)。
我正在遵循通过 angularjs 控制器实现自定义数据类型的常规模式:
angular.module('umbraco')
.controller('MyDataType', ['$scope', function ($scope) {
var loadedData = $scope.model.value;
// Do stuff with "loadedData"
$scope.model.value = loadedData;
}])
当我的 JSON 模型中有大量数据(即 json 将序列化为 ~150 个或更多字符)时,似乎会出现此问题
我可以存储在 Umbraco 数据类型中的数据量是否有限制?还是我在这里忽略了其他东西?
此问题的解决方案是清理我的控制器存储在 $scope.model.value
中的 JSON 数据。
似乎 Umbraco 对 angularjs 放入范围变量(“$$hashKey”等)的额外元数据 "stuff" 很敏感,这似乎是导致我的数据类型为随后使用格式错误的 JSON 字符串而不是预期的 JSON 对象进行初始化。
最后,我选择了:
- 克隆我的数据类型用
初始化的模型值(即 $scope.myModel
,如下所示)
- 设置
$watcher
以将 $model.scope.value
与对 $scope.myModel
所做的任何更改同步
- 在同步期间,在
$model.scope.value
中存储 $scope.myModel
的经过清理的克隆(即排除内部 angular 元数据,如“$$hashKey”)
示例伪代码演示解决方案:
angular.module('umbraco')
.controller('MyDataType', ['$scope', function ($scope) {
$scope.myModel = cloneValue($scope.model.value)
var endWatcher = $scope.$watch('myModel', function() {
$scope.model.value = cloneAndSanitizeMyModel($scope.myModel)
});
$scope.$on('$destroy', function() {
endWatcher();
});
}])
我偶尔会注意到 Umbraco 初始化我的数据类型 $scope.model.value
值的数据中的奇怪行为。
我正在使用 Umbraco 7.11.1,我的自定义数据类型是围绕基于复杂 JSON 的数据模型构建的。
在 "Save and Publish" 期间(来自 Umbraco 后台),Umbraco 似乎接受了我的控制器存储在 $scope.model.value
中的 JSON - 没有显示错误对话框,控制台错误记录等
然而,当后台重新加载时,Umbraco 尝试使用部分的、格式错误的 JSON 字符串来初始化我的数据类型,而不是预期的 JSON 对象(即之前保存的对象)。
我正在遵循通过 angularjs 控制器实现自定义数据类型的常规模式:
angular.module('umbraco')
.controller('MyDataType', ['$scope', function ($scope) {
var loadedData = $scope.model.value;
// Do stuff with "loadedData"
$scope.model.value = loadedData;
}])
当我的 JSON 模型中有大量数据(即 json 将序列化为 ~150 个或更多字符)时,似乎会出现此问题
我可以存储在 Umbraco 数据类型中的数据量是否有限制?还是我在这里忽略了其他东西?
此问题的解决方案是清理我的控制器存储在 $scope.model.value
中的 JSON 数据。
似乎 Umbraco 对 angularjs 放入范围变量(“$$hashKey”等)的额外元数据 "stuff" 很敏感,这似乎是导致我的数据类型为随后使用格式错误的 JSON 字符串而不是预期的 JSON 对象进行初始化。
最后,我选择了:
- 克隆我的数据类型用 初始化的模型值(即
- 设置
$watcher
以将$model.scope.value
与对$scope.myModel
所做的任何更改同步
- 在同步期间,在
$model.scope.value
中存储
$scope.myModel
,如下所示)
$scope.myModel
的经过清理的克隆(即排除内部 angular 元数据,如“$$hashKey”)
示例伪代码演示解决方案:
angular.module('umbraco')
.controller('MyDataType', ['$scope', function ($scope) {
$scope.myModel = cloneValue($scope.model.value)
var endWatcher = $scope.$watch('myModel', function() {
$scope.model.value = cloneAndSanitizeMyModel($scope.myModel)
});
$scope.$on('$destroy', function() {
endWatcher();
});
}])