Javascript 在自定义Umbraco数据类型中加载$scope.model.value时JSON格式不正确

Javascript 在自定义Umbraco数据类型中加载$scope.model.value时JSON格式不正确,javascript,angularjs,json,umbraco7,Javascript,Angularjs,Json,Umbraco7,我偶尔会注意到数据中有奇怪的行为,Umbraco使用初始化我的数据类型$scope.model.valuevalue 我正在使用Umbraco 7.11.1,我的自定义数据类型是围绕一个复杂的基于JSON的数据模型构建的 在“保存和发布”(从Umbraco后台)过程中,Umbraco似乎接受控制器存储在$scope.model.value中的JSON-不显示错误对话框,不记录控制台错误等 但是,当后台重新加载时,Umbraco会尝试使用部分格式错误的JSON字符串初始化我的数据类型,而不是使用预

我偶尔会注意到数据中有奇怪的行为,Umbraco使用初始化我的数据类型
$scope.model.value
value

我正在使用Umbraco 7.11.1,我的自定义数据类型是围绕一个复杂的基于JSON的数据模型构建的

在“保存和发布”(从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模型中有大量数据时(即序列化为~150个字符或更多的JSON),问题似乎就会出现


我可以存储在Umbraco数据类型中的数据量是否有限制?还是我在这里忽略了什么

此问题的解决方案是清理控制器存储在
$scope.model.value
中的JSON数据

Umbraco似乎对angularjs放入范围变量($$hashKey)的额外元数据“东西”很敏感,这似乎是导致我的数据类型随后用格式错误的JSON字符串而不是预期的JSON对象初始化的原因

最后,我选择了:

  • 克隆我的数据类型初始化时使用的模型值(如下图所示)
  • 设置
    $watcher
    以使
    $model.scope.value
    与对
    $scope.myModel
    所做的任何更改同步
  • 在同步过程中,在
    $model.scope.value
  • 示例伪代码演示解决方案:

    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();
        });
    }])
    

    AngularJS放入范围变量(“$$hashKey”等)。如果您使用angular.toJson(obj)而不是JSON.stringify(obj),那么angular将为您删除这些内部使用值。