breezejs如何使用作为数据源

breezejs如何使用作为数据源,breeze,Breeze,我使用breezejs已经有一段时间了,我很高兴它和它丰富的功能,但是breezejs的问题是我几乎不能将它用作任何数据源 没有一个网格可以显示数据并且不丢失功能,并且不能将实体数组用作普通数组。(因此您不能将其用作下拉列表的数据源…) 所以,为了在UI中显示数据,我最终将数据转换为普通数组,并失去了Breeze功能(如轨迹更改),然后保存并将其转换回 以下代码用于转换为普通数组: if(data.length>0) { var names = Object.getOwn

我使用breezejs已经有一段时间了,我很高兴它和它丰富的功能,但是breezejs的问题是我几乎不能将它用作任何数据源

没有一个网格可以显示数据并且不丢失功能,并且不能将实体数组用作普通数组。(因此您不能将其用作下拉列表的数据源…)

所以,为了在UI中显示数据,我最终将数据转换为普通数组,并失去了Breeze功能(如轨迹更改),然后保存并将其转换回

以下代码用于转换为普通数组:

  if(data.length>0)
{
       var names = Object.getOwnPropertyNames(data[0]._backingStore);
       var columns: string[] = [];
       for (var i = 0; i < names.length; i++)
       {
           columns.push(names[i]); //Getting columns name
       }
       var newArray = [];
       data.forEach((item, index, array) => {
            newArray.push(item._backingStore);
       });
}
if(数据长度>0)
{
var name=Object.getOwnPropertyNames(数据[0]。\u备份存储);
变量列:字符串[]=[];
对于(var i=0;i{
newArray.push(item.\u backingStore);
});
}
我的问题是,如何正确地使用breezejs在UI中显示数据?
(我使用angualr(热毛巾))

假设您试图解决以下问题:

  • 网格不喜欢Breeze实体上的entityType和entityAspect属性
  • 这个网格不知道如何处理作为函数的敲除样式的“属性”
  • 使用Breeze实体的属性值创建POCO对象会断开与更改跟踪的连接
  • 您可以尝试创建POCO对象,使用Knockout observable作为属性的getter和setter函数。下面是一个简单的例子:

    Typescript+Knockout:

    class PocoBreezeEntity {
        constructor(private entity: breeze.Entity) {
            entity.entityType.dataProperties.forEach(
                dataProperty => {
                    Object.defineProperty(
                        this,
                        dataProperty.name,
                        {
                            get: entity[dataProperty.name],
                            set: entity[dataProperty.name],
                            enumerable: true,
                            configurable: true
                        });
                });
        }
    }
    
    字体+角度:

    class PocoBreezeEntity {
        constructor(private entity: breeze.Entity) {
            entity.entityType.dataProperties.forEach(
                dataProperty => {
                    Object.defineProperty(
                        this,
                        dataProperty.name,
                        {
                            get: function() { return entity[dataProperty.name]; },
                            set: function(newValue) { entity[dataProperty.name] = newValue; },
                            enumerable: true,
                            configurable: true
                        });
                });
        }
    }
    

    通过这种方法,您可以在不丢失Breeze更改跟踪的情况下获得POCO实体的好处。

    您在使用breezejs时使用了什么?
    breezejs
    ?我尝试了Kendo、wijmo、internet上的开源网格(如handsontable),以及angular()的最后一个多选组合框。ng网格呢??它不仅与网格有关,在其他组件中,如下拉列表问题也存在。我正在寻找一种解决数据绑定问题的方法。我们有一个通用模块服务,其中我们检索通用服务,它将在不同的页面中使用,我们使用angular http,但在类似插入更新删除的问题中,网格显示我们使用breezejs和AngularJS感谢您的解决方案,但我们使用angular(+typescript)。如果有可能更改您的解决方案以匹配环境,我也会尝试。哈,我也在使用typescript,我会添加typescript代码。请记住角度部分(不使用敲除):)如果使用角度,您已经在使用定义的属性,不是属性函数,所以这不可能是问题。可能是#1-我曾与一些人合作,他们在哑网格方面遇到问题,无法处理循环引用