Breeze:获取包含在元数据对象中的结果集合

时间:2014-05-23 15:56:08

标签: angularjs asp.net-web-api breeze

我正在尝试将Breeze与AngularJS和Web API后端一起使用,它以下列格式返回数据:

API响应格式:

{
    Count: 123,
    Items: [
        {
            CustomerID: 1,
            FirstName: "John",
            Surname: "Smith",
            // etc.. 
        }, 
        {
            CustomerID: 2,
            FirstName: "Bill",
            Surname: "Jones",
            // etc.. 
        }, 
        {
            // 23 more Customer records...
        }
    ],
    NextPageLink: "http://localhost/web/api/customers?$skip=25"
}

我已按照Breeze.js网站http://www.breezejs.com/documentation/metadata-hand-depth上的示例在metaDataStore中手动设置Customer实体:

function addCustomer() {
    addType({
        shortName: "Customer",
        defaultResourceName: "customers",
        dataProperties: {
            CustomerID: { type: ID, isPartOfKey: true },
            FirstName: { max: 50 },
            Surname:  { max: 50 },
            // a bunch more properties
       }
    });
}

我查询“客户”端点的代码如下所示:

function getCustomers(){
    var customers =  manager.getEntities('Customer');
    return breeze.EntityQuery.from('customers')
        .using(manager).execute()
        .then(function(data){
            return data.results; // breakpoint here is reached
        });
}

查询成功执行,就像我在指定的位置放置一个断点时,data对象在那里,但data.results属性是一个包含看起来像单个Customer实体的数组的数组是空的。见截图:

Dev tools contents of data.results

我怀疑这是因为后端将集合作为包装器对象的Items属性返回。

我的问题是:假设我无法更改后端API的响应,如何告诉Breeze Customer实体实际包含在{{1属性?

1 个答案:

答案 0 :(得分:1)

您可以构建自己的自定义JsonResultsAdapter来执行此操作。

有关详细信息,请参阅http://www.breezejs.com/documentation/mapping-json

我们还有一个sample,可以显示第三方后端的自定义适配器。

希望这有帮助。