将BreezeJS与AngularJS一起使用时出错
将BreezeJS与AngularJS一起使用会产生错误。例如,在ng中使用“filter”时,重复控制台报告:堆栈空间不足 复制步骤将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,它有一个名为
另一个堆栈溢出错误。这将不起作用,因为您要求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将搜索文本与TodoItem的每个属性匹配 Breeze实体的属性包括angular.copy()
,它有一个名为entityAspect
的属性,该属性指向entity
实例。。。然后在你周围移动直到堆栈溢出(双关语) 您需要使用一个过滤器函数来进行特定的比较。试试这个: 在Index.html中TodoItem
-
... 等
在controller.js中
$scope.searchText=“”;
//注意:这叫很多!
$scope.itemFilter=函数(todoItem){
var searchText=$scope.searchText;
//如果有搜索文本,请在描述中查找;否则返回true
返回搜索文本?
-1!=todoItem.Description.toLowerCase().indexOf(searchText.toLowerCase()):
是的;
};
就像我的机器上的符咒:)
p、 你在
上的不幸也有同样的原因。。。它是每个属性的深度副本,实体往往有循环引用。我也遇到了同样的问题,我在breeze中使用了查询投影,即“select”子句,解决了这个问题。它返回纯JavaScript对象,而不是“包装”的breeze实体。我刚刚遇到了同样的问题,我通过在breeze中使用查询投影(即“select”子句)解决了这个问题。它返回纯JavaScript对象,而不是“包装”的breeze实体。好的,我实现了一个自定义过滤器,它排除了导航属性。它只是过滤当前接收的breeze实体angular.copy()
(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(实体);
<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; };(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
(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; } }); })();
-
... 等
在controller.js中
$scope.searchText=“”;
//注意:这叫很多!
$scope.itemFilter=函数(todoItem){
var searchText=$scope.searchText;
//如果有搜索文本,请在描述中查找;否则返回true
返回搜索文本?
-1!=todoItem.Description.toLowerCase().indexOf(searchText.toLowerCase()):
是的;
};
就像我的机器上的符咒:)