代码之家  ›  专栏  ›  技术社区  ›  Dacre Denny

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

  •  1
  • Dacre Denny  · 技术社区  · 6 年前

    我偶尔会注意到Umbraco初始化我的数据类型的数据中的奇怪行为 $scope.model.value 价值与。

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

    在“保存并发布”(来自Umbraco后台)期间,Umbraco似乎接受了我的控制器所存储的JSON $scope.model.value值 -不显示错误对话框,记录控制台错误等。

    但是,当后台重新加载时,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数据类型中可以存储的数据量有限制吗?或者还有什么我在这里可以忽略的?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Dacre Denny    6 年前

    解决这个问题的方法是清理我的控制器存储在 $scope.model.value .

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

    最后,我选择:

    1. 克隆模型值(即 $scope.myModel 如下所示)我的数据类型是用
    2. 建立一个 $watcher 同步 $model.scope.value 有任何改变 $scope.myModel范围
    3. 在同步过程中,存储 $scope.myModel范围 (即排除内部角度元数据,如“$$hashKey”)的 $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();
        });
    }])