Angularjs Breeze、Wijmo、Angular和JsonResultsAdapter-RangeError:超过最大调用堆栈大小

Angularjs Breeze、Wijmo、Angular和JsonResultsAdapter-RangeError:超过最大调用堆栈大小,angularjs,breeze,wijmo,Angularjs,Breeze,Wijmo,我已经修改了一个Wijmo数据(带有wijgrid)示例(breeze native.html)来处理Angular。很好。 然而,当我尝试调整它以在我的数据上运行时,我得到了可怕的“RangeError:超出了最大调用堆栈大小”错误。由于我的数据不是“Breeze标准”,所以我使用了JSONResultAdapter和我自己的元数据来创建实体。这对Angular没问题,但不喜欢wijmo Northwind示例中的数据如下所示: [{“产品ID”:1,“供应商ID”:1,“类别ID”:1,“产

我已经修改了一个Wijmo数据(带有wijgrid)示例(breeze native.html)来处理Angular。很好。 然而,当我尝试调整它以在我的数据上运行时,我得到了可怕的“RangeError:超出了最大调用堆栈大小”错误。由于我的数据不是“Breeze标准”,所以我使用了JSONResultAdapter和我自己的元数据来创建实体。这对Angular没问题,但不喜欢wijmo

Northwind示例中的数据如下所示: [{“产品ID”:1,“供应商ID”:1,“类别ID”:1,“产品名称”:“柴”,“英文名称”:“达兰萨拉茶”,“每单位数量”:“10盒20袋”,“单价”:18.0,“库存单位”:39,“订单单位”:0,“再订单等级”:10,“停产”:假,{…}]

我的数据如下: [{“ID”:“1”,“idUser”:“1”,“idorganization”:“2”,“isActive”:“1”,“idRole”:“1”,“suborganization”:“1”,“strEMail”:”bob@gmail.com,“strTel”:null,“strUsername”:“bob”,“strPassword”:“*196BDEDE2AE4F84CA44C47D54D78478C7E2BD7B7”,“datCreated”:null,“datLastModified”:null,“idUserLastModified”:null,“idUserCreated”:null},{…}]

由于没有真正的区别,问题一定在于元数据或JsonResultsAdapter

下面是带有JsonResultsAdapter的模块:

angular.module('app_jsonResultsAdapter',['app_metadata'])
/* jsonResultsAdapter: parses data into entities */
.value('bem_jsonResultsAdapter',
    new breeze.JsonResultsAdapter({

        name: "seltec",

        extractResults: function(json) {
            return json.results;
        },
        visitNode: function(node, mappingContext, nodeContext) {
            var entityType = "Users";
            var propertyName = nodeContext.propertyName;
            var ignore = propertyName && propertyName.substr(0, 1) === "$";

            return {
                entityType: entityType,
                nodeId: node.$id,
                nodeRefId: node.$ref,
                ignore: ignore
            };
        }

    }));  
以下是包含元数据的模块:

angular.module('app_metadata', ['logger'])

    .factory("bem_metadata", function () {

        var bem_Metadata = {
            getUserMetadata: getUserMetadata
        };

        return bem_Metadata;

        function getUserMetadata(){

        var x = {
            "metadataVersion": "1.0.4",
//            "namingConvention": "camelCase",
            "localQueryComparisonOptions": "caseInsensitiveSQL",
            "structuralTypes": [
                {
                    "shortName": "Users",
                    "namespace": "Models.Seltec-T_Users",
                    "autoGeneratedKeyType": "None",
                    "defaultResourceName": "Users",
                    "dataProperties": [

//  `ID` varchar(38) NOT NULL,
                        {
                            "name": "ID",
                            "dataType": "String",
                            "isPartOfKey": true,
                            "validators": [
                                {
                                    "name": "string"
                                }
                            ]
                        },
//  `idUser` varchar(38) DEFAULT NULL,
                        {
                            "name": "idUser",
                            "dataType": "String",
                            "validators": [
                                {
                                    "name": "string"
                                }
                            ]
                        },
//  `idOrganisation` int(11) DEFAULT NULL,
                        {
                            "name": "idOrganisation",
                            "dataType": "Int32",
                            "validators": [
                                {
                                    "name": "int32"
                                }
                            ]
                        },
//  `isActive` tinyint(1) DEFAULT '0',
                        {
                            "name": "isActive",
                            "dataType": "Boolean",
                            "validators": [
                                {
                                    "name": "bool"
                                }
                            ]
                        },
//  `idRole` int(11) DEFAULT '0',
                        {
                            "name": "idRole",
                            "dataType": "Int32",
                            "validators": [
                                {
                                    "name": "int32"
                                }
                            ]
                        },
//  `SubOrganisations` tinyint(1) DEFAULT '0',
                        {
                            "name": "SubOrganisations",
                            "dataType": "Boolean",
                            "validators": [
                                {
                                    "name": "bool"
                                }
                            ]
                        },
//  `strEMail` varchar(100) DEFAULT NULL,
                        {
                            "name": "strEMail",
                            "dataType": "String",
                            "validators": [
                                {
                                    "name": "string"
                                }
                            ]
                        },
//  `strTel` varchar(30) DEFAULT NULL,
                        {
                            "name": "strTel",
                            "dataType": "String",
                            "validators": [
                                {
                                    "name": "string"
                                }
                            ]
                        },
//  `strUsername` varchar(255) DEFAULT NULL,
                        {
                            "name": "strUsername",
                            "dataType": "String",
                            "validators": [
                                {
                                    "name": "string"
                                }
                            ]
                        },
//  `strPassword` varchar(255) DEFAULT NULL,
                        {
                            "name": "strPassword",
                            "dataType": "String",
                            "validators": [
                                {
                                    "name": "string"
                                }
                            ]
                        },
//  `datCreated` datetime DEFAULT NULL,
                        {
                            "name": "datCreated",
                            "dataType": "DateTime",
                            "validators": [
                                {
                                    "name": "date"
                                }
                            ]
                        },
//  `datLastModified` datetime DEFAULT NULL,
                        {
                            "name": "ID",
                            "dataType": "DateTime",
                            "validators": [
                                {
                                    "name": "date"
                                }
                            ]
                        },
//  `idUserLastModified` varchar(38) DEFAULT NULL,
                        {
                            "name": "idUserLastModified",
                            "dataType": "String",
                            "validators": [
                                {
                                    "name": "string"
                                }
                            ]
                        },
//  `idUserCreated` varchar(38) DEFAULT NULL,
                        {
                            "name": "idUserCreated",
                            "dataType": "String",
                            "validators": [
                                {
                                    "name": "string"
                                }
                            ]
                        }

                    ]
                }
            ],
            "resourceEntityTypeMap": {
                "User": "User"
            }
        }

        return x;
        }
    }); 
以及控制器:

angular.module('app',['app_metadata', 'wijmo'])

.controller('Ctrl', function ($scope, bem_metadata){

    breeze.config.initializeAdapterInstance("modelLibrary", "backingStore", true);

    var j = new breeze.JsonResultsAdapter({

        name: "seltec",

        extractResults: function(json) {
            return json.results;
        },
        visitNode: function(node, mappingContext, nodeContext) {
            var entityType = "Users";
            var propertyName = nodeContext.propertyName;
            var ignore = propertyName && propertyName.substr(0, 1) === "$";

            return {
                entityType: entityType,
                nodeId: node.$id,
                nodeRefId: node.$ref,
                ignore: ignore
            };
        }
    });

    var dataService = new breeze.DataService({
        serviceName: "http://lanet.local/backend/webservice/public/rest/index.php/",
        hasServerMetadata: false,
        jsonResultsAdapter: j
    });

    var ms = new breeze.MetadataStore();
    var x = bem_metadata.getUserMetadata();
    ms.importMetadata (x)

    var manager = new breeze.EntityManager({
        dataService: dataService,
        metadataStore: ms
    });

    $scope.users = [];

    var query = new breeze.EntityQuery("users");

    manager.executeQuery(query).then(function (data) {
        $scope.users = data.results;
        $scope.$digest();
    }).fail(function (e) {
            alert(e);
        });

});
html中只有网格:

<wijgrid id="dataGrid" data="{{users}}" allowEditing="true"  allowSorting="true" columnsAutogenerationMode="none"
         style="width: 600px;">
    <columns>
        <column headerText="Username" dataKey="strUsername"></column>
        <column headerText="Email" dataKey="strEMail"></column>
    </columns>
</wijgrid>

我想知道的是,为什么我的元数据会导致wijgrid出现这样的问题。它可以处理来自Web API的数据,所以我知道它应该可以工作

助教! 克雷格

PS:我想如果我添加Northwind的例子会有所帮助:

<!DOCTYPE html>
<html lang="en" ng-app="wijmo">
<head>
    <title>Data - BreezeJs without BreezeDataView</title>

    <meta charset="utf-8"/>
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
    <meta name="description" content="Remote shaped data downloaded by BreezeJs shown in a wijgrid"/>
    <meta name="keywords" content=""/>
    <meta name="author" content="ComponentOne"/>

    <!--jQuery References-->
    <script src="http://code.jquery.com/jquery-1.9.1.min.js" type="text/javascript"></script>
    <script src="http://code.jquery.com/ui/1.10.1/jquery-ui.min.js" type="text/javascript"></script>

    <!--Theme-->
    <link href="http://cdn.wijmo.com/themes/aristo/jquery-wijmo.css" rel="stylesheet" type="text/css"/>

    <!--Wijmo Widgets CSS-->
    <link href="http://cdn.wijmo.com/jquery.wijmo-pro.all.3.20131.3.min.css" rel="stylesheet" type="text/css"/>

    <!--Wijmo Widgets JavaScript-->
    <script src="http://cdn.wijmo.com/jquery.wijmo-open.all.3.20131.3.js" type="text/javascript"></script>
    <script src="http://cdn.wijmo.com/jquery.wijmo-pro.all.3.20131.3.js" type="text/javascript"></script>
    <!--<script src="http://cdn.wijmo.com/wijmo/wijmo.data.breeze.js" type="text/javascript"></script>-->
    <script type="text/javascript" src="Scripts/wijmo.data.breeze.js"></script>

    <!--Breeze.js References -->
    <script type="text/javascript" src="Scripts/q.js"></script>
    <script type="text/javascript" src="Scripts/breeze.debug.js"></script>
    <script type="text/javascript" src="Scripts/datajs-1.0.3.js"></script>

    <script type="text/javascript" src="Scripts/toastr.min.js"></script>

    <script src="Scripts/angular.js"></script>
    <script src="http://cdn.wijmo.com/interop/angular.wijmo.3.20131.3.js" type="text/javascript"></script>


    <style type="text/css">
        table {
            border-collapse: collapse;
        }

        table caption {
            font-size: 150%;
        }

        th, td {
            border: 1px solid #AAAAAA;
            text-align: center;
            padding: 0.5em;
        }

        th {
            background-color: #CCCCCC;
        }
    </style>

    <script id="scriptInit" type="text/javascript">
        $.support.cors = true;


        function ViewModel($scope) {

            var dataService = new breeze.DataService({
                serviceName: "http://demo.componentone.com/aspnet/NorthwindAPI/api/read",
                hasServerMetadata: false
            });
            var ms = new breeze.MetadataStore();

            var manager = new breeze.EntityManager({
                dataService: dataService,
                metadataStore: ms
            });

            $scope.products = [];

            var query = new breeze.EntityQuery("Product");

            manager.executeQuery(query).then(function (data) {
                $scope.products = data.results;
                $scope.$digest();
            }).fail(function (e) {
                        alert(e);
                    });

        }

    </script>

</head>

<body class="demo-single" ng-controller="ViewModel">


<div class="container">
    <div class="header">
        <h2>Data - BreezeJs without BreezeDataView</h2>
    </div>
    <div class="main demo">


        <h1>Products</h1>
        <wijgrid id="dataGrid" data="{{products}}" allowEditing="true" allowSorting="true"
                 columnsAutogenerationMode="none"
                 style="width: 600px;">
            <columns>
                <column headerText="Product Name" dataKey="Product_Name"></column>
                <column headerText="English Name" dataKey="English_Name"></column>
            </columns>
        </wijgrid>


    </div>

</div>

</body>

</html>

数据-不带BreezeDataView的BreezeJs
桌子{
边界塌陷:塌陷;
}
表格标题{
字体大小:150%;
}
th,td{
边框:1px实心#AAAAA;
文本对齐:居中;
填充:0.5em;
}
th{
背景色:#中交;
}
$.support.cors=true;
函数视图模型($scope){
var dataService=new breeze.dataService({
服务名称:“http://demo.componentone.com/aspnet/NorthwindAPI/api/read",
hasServerMetadata:false
});
var ms=new breeze.MetadataStore();
var manager=new breeze.EntityManager({
数据服务:数据服务,
元数据存储:ms
});
$scope.products=[];
var query=new breeze.EntityQuery(“产品”);
manager.executeQuery.then(函数(数据){
$scope.products=data.results;
$scope.$digest();
}).失败(功能(e){
警报(e);
});
}
数据-不带BreezeDataView的BreezeJs
产品

这是大量需要调试的代码。如果你把问题减少到最低限度,我会更容易回答你的问题,因为这个问题仍然是可以重复的。谢谢,但这个问题已经有一年了,不再是问题了。