javascript - 在自定义 Umbraco 数据类型中加载 $scope.model.value 时格式错误的 JSON

标签 javascript angularjs json umbraco7

<分区>

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

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

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

然而,当后台重新加载时,Umbraco 尝试使用部分的、格式错误的 JSON 字符串而不是预期的 JSON 对象(即之前保存的)来初始化我的数据类型。

我遵循通过 angularjs Controller 实现自定义数据类型的常规模式:

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 数据类型中的数据量是否有限制?还是我在这里忽略了其他东西?

最佳答案

此问题的解决方案是清理我的 Controller 存储在 $scope.model.value 中的 JSON 数据。

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

最后,我选择:

  1. 克隆我的数据类型初始化的模型值(即 $scope.myModel,如下所示)
  2. 设置一个 $watcher 以将 $model.scope.value 与对 $scope.myModel 所做的任何更改同步
  3. 在同步期间,在 $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();
    });
}])

关于javascript - 在自定义 Umbraco 数据类型中加载 $scope.model.value 时格式错误的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51685041/

相关文章:

javascript - 使 setTimeout 无限

javascript - Onsen UI - Google map 仅在事件选项卡中工作

javascript - 将 jQuery 焦点转移到下一个 div 分隔输入

json - 如何在 cfhttpparam 中发送 header 信息

javascript - 将 UL 添加到 LI(不将 LI 添加到 UL)

javascript - 使用 ng-file-upload 和 angularjs 进行内容处理

angularjs - 你可以覆盖 AngularUI Bootstrap 中的特定模板吗?

java - AngularJS 的 Spring 安全性 - 注销不起作用

javascript - 如何在字符串 javascript 中添加 json stringify?

php - 一次性将 MySQL 表行导出为单个文件(特别是 JSON)