将BreezeJS与AngularJS一起使用时出错

将BreezeJS与AngularJS一起使用时出错,angularjs,breeze,Angularjs,Breeze,将BreezeJS与AngularJS一起使用会产生错误。例如,在ng中使用“filter”时,重复控制台报告:堆栈空间不足 复制步骤 以Todo Angular BreezeJS为例,在VS 2012中开放 在index.html中,在 当您使用angular.copy(src,dest)时;其中src是由BreezeJS创建的 另一个堆栈溢出错误。这将不起作用,因为您要求Angular将搜索文本匹配到TodoItem的每个属性 Breeze实体的属性包括entityAspect,它有一个名为

将BreezeJS与AngularJS一起使用会产生错误。例如,在ng中使用“filter”时,重复控制台报告:堆栈空间不足

复制步骤

  • 以Todo Angular BreezeJS为例,在VS 2012中开放
  • 在index.html中,在
  • 当您使用angular.copy(src,dest)时;其中src是由BreezeJS创建的
    另一个堆栈溢出错误。

    这将不起作用,因为您要求Angular将搜索文本匹配到TodoItem的每个属性

    Breeze实体的属性包括
    entityAspect
    ,它有一个名为
    entity
    的属性,该属性指向
    TodoItem
    实例。。。然后在你周围移动直到堆栈溢出(双关语)

    您需要使用一个过滤器函数来进行特定的比较。试试这个:

    Index.html中

    • ... 等 在controller.js中

      $scope.searchText=“”; //注意:这叫很多! $scope.itemFilter=函数(todoItem){ var searchText=$scope.searchText; //如果有搜索文本,请在描述中查找;否则返回true 返回搜索文本? -1!=todoItem.Description.toLowerCase().indexOf(searchText.toLowerCase()): 是的; }; 就像我的机器上的符咒:)


      p、 你在
      angular.copy()
      上的不幸也有同样的原因。。。它对每个属性都进行深度复制,实体往往具有循环引用。

      这不起作用,因为您要求Angular将搜索文本与TodoItem的每个属性匹配

      Breeze实体的属性包括
      entityAspect
      ,它有一个名为
      entity
      的属性,该属性指向
      TodoItem
      实例。。。然后在你周围移动直到堆栈溢出(双关语)

      您需要使用一个过滤器函数来进行特定的比较。试试这个:

      Index.html中

      • ... 等 在controller.js中

        $scope.searchText=“”; //注意:这叫很多! $scope.itemFilter=函数(todoItem){ var searchText=$scope.searchText; //如果有搜索文本,请在描述中查找;否则返回true 返回搜索文本? -1!=todoItem.Description.toLowerCase().indexOf(searchText.toLowerCase()): 是的; }; 就像我的机器上的符咒:)


        p、 你在
        angular.copy()
        上的不幸也有同样的原因。。。它是每个属性的深度副本,实体往往有循环引用。

        我也遇到了同样的问题,我在breeze中使用了查询投影,即“select”子句,解决了这个问题。它返回纯JavaScript对象,而不是“包装”的breeze实体。

        我刚刚遇到了同样的问题,我通过在breeze中使用查询投影(即“select”子句)解决了这个问题。它返回纯JavaScript对象,而不是“包装”的breeze实体。

        好的,我实现了一个自定义过滤器,它排除了导航属性。它只是过滤当前接收的breeze实体

        (function () {
        'use strict';
        
        angular.module('appFilter', []).filter('breezeFilter', function () {
        
            function contains(searchString, searchTerm) {
                if (!searchString) return false;
                return searchString.toString().toLowerCase().indexOf(searchTerm.toLowerCase()) != -1;
            }
        
            function getKeys(entity) {
                var names = [];
                var properties = entity.entityAspect.extraMetadata.properties;
                for (var property in properties) { names.push(property); }
                return names;
            }
        
            function search(entity, searchTerm) {
                var found = false;
                if ("entityAspect" in entity) {
                    var keys = getKeys(entity);
                    for (var i = 0; i < keys.length && !found; i++) {
                        if (keys[i].slice(-2) !== "Id") {
                            var obj = entity[keys[i]];
        
                            switch (typeof obj) {
                                case 'object':
                                    if (obj && !('navigationProperty' in obj)) {
                                        found = search(obj, searchTerm);
                                    }
                                    break;
                                case 'number':
                                case 'string':
                                    found = contains(obj, searchTerm);
                                    break;
                                case 'boolean':
                                default:
                            }
                        }
                    }
                }
                return found;
            }
        
            return function (breezeEntities, expression) {
                if (!expression || expression.length < 2) return breezeEntities;
                var filtered = [];
                angular.forEach(breezeEntities, function (entity) {
                    if (search(entity, expression)) {
                        filtered.push(entity);
                    }
                });
                return filtered;
            }
        });
        })();
        
        (函数(){
        "严格使用",;
        角度.module('appFilter',[]).filter('breezeFilter',function(){
        函数包含(searchString、searchTerm){
        如果(!searchString)返回false;
        返回searchString.toString().toLowerCase().indexOf(searchTerm.toLowerCase())!=-1;
        }
        函数getKeys(实体){
        变量名称=[];
        var properties=entity.entityAspect.extraMetadata.properties;
        for(属性中的var属性){names.push(属性);}
        返回姓名;
        }
        函数搜索(实体、搜索词){
        var=false;
        if(实体中的“entityAspect”){
        var keys=getKeys(实体);
        对于(变量i=0;i

        我希望这能有所帮助。

        好的,我实现了一个自定义过滤器,它排除了导航属性。它只是过滤当前接收的breeze实体

        (function () {
        'use strict';
        
        angular.module('appFilter', []).filter('breezeFilter', function () {
        
            function contains(searchString, searchTerm) {
                if (!searchString) return false;
                return searchString.toString().toLowerCase().indexOf(searchTerm.toLowerCase()) != -1;
            }
        
            function getKeys(entity) {
                var names = [];
                var properties = entity.entityAspect.extraMetadata.properties;
                for (var property in properties) { names.push(property); }
                return names;
            }
        
            function search(entity, searchTerm) {
                var found = false;
                if ("entityAspect" in entity) {
                    var keys = getKeys(entity);
                    for (var i = 0; i < keys.length && !found; i++) {
                        if (keys[i].slice(-2) !== "Id") {
                            var obj = entity[keys[i]];
        
                            switch (typeof obj) {
                                case 'object':
                                    if (obj && !('navigationProperty' in obj)) {
                                        found = search(obj, searchTerm);
                                    }
                                    break;
                                case 'number':
                                case 'string':
                                    found = contains(obj, searchTerm);
                                    break;
                                case 'boolean':
                                default:
                            }
                        }
                    }
                }
                return found;
            }
        
            return function (breezeEntities, expression) {
                if (!expression || expression.length < 2) return breezeEntities;
                var filtered = [];
                angular.forEach(breezeEntities, function (entity) {
                    if (search(entity, expression)) {
                        filtered.push(entity);
                    }
                });
                return filtered;
            }
        });
        })();
        
        (函数(){
        "严格使用",;
        角度.module('appFilter',[]).filter('breezeFilter',function(){
        函数包含(searchString、searchTerm){
        如果(!searchString)返回false;
        返回searchString.toString().toLowerCase().indexOf(searchTerm.toLowerCase())!=-1;
        }
        函数getKeys(实体){
        变量名称=[];
        var properties=entity.entityAspect.extraMetadata.properties;
        for(属性中的var属性){names.push(属性);}
        返回姓名;
        }
        函数搜索(实体、搜索词){
        var=false;
        if(实体中的“entityAspect”){
        var keys=getKeys(实体);
        
        (anonymous function) angular.js:5582
        (anonymous function) angular.js:4679
        Scope.$digest angular.js:7739
        Scope.$apply angular.js:7926
        listener angular.js:11228
        v.event.dispatch jquery-1.8.3.min.js:2
        o.handle.u
        
        <div> <input data-ng-model="searchText" type="Search" placeholder="search" /> </div> <ul> <li data-ng-repeat="item in items | filter:itemFilter"> ... etc. ... $scope.searchText = ""; // Beware: this is called a lot! $scope.itemFilter = function (todoItem) { var searchText = $scope.searchText; // if there is search text, look for it in the description; else return true return searchText ? -1 != todoItem.Description.toLowerCase().indexOf(searchText.toLowerCase()) : true; };
        (function () {
        'use strict';
        
        angular.module('appFilter', []).filter('breezeFilter', function () {
        
            function contains(searchString, searchTerm) {
                if (!searchString) return false;
                return searchString.toString().toLowerCase().indexOf(searchTerm.toLowerCase()) != -1;
            }
        
            function getKeys(entity) {
                var names = [];
                var properties = entity.entityAspect.extraMetadata.properties;
                for (var property in properties) { names.push(property); }
                return names;
            }
        
            function search(entity, searchTerm) {
                var found = false;
                if ("entityAspect" in entity) {
                    var keys = getKeys(entity);
                    for (var i = 0; i < keys.length && !found; i++) {
                        if (keys[i].slice(-2) !== "Id") {
                            var obj = entity[keys[i]];
        
                            switch (typeof obj) {
                                case 'object':
                                    if (obj && !('navigationProperty' in obj)) {
                                        found = search(obj, searchTerm);
                                    }
                                    break;
                                case 'number':
                                case 'string':
                                    found = contains(obj, searchTerm);
                                    break;
                                case 'boolean':
                                default:
                            }
                        }
                    }
                }
                return found;
            }
        
            return function (breezeEntities, expression) {
                if (!expression || expression.length < 2) return breezeEntities;
                var filtered = [];
                angular.forEach(breezeEntities, function (entity) {
                    if (search(entity, expression)) {
                        filtered.push(entity);
                    }
                });
                return filtered;
            }
        });
        })();