Breezejs嵌套了Array和结果绑定

时间:2013-10-04 15:09:12

标签: knockout.js asp.net-web-api breeze

使用breezejs和WEBAPI,我提取产品列表,每个产品都有一个组件列表。

    var list = function (productsObservable) {
        var query = EntityQuery.from('Products')
                    .expand('components')
        return manager.executeQuery(query)
                .then(querySucceeded)
                .fail(datacontext.queryFailed);

        function querySucceeded(data) {
            // process results
        }
    }



function querySucceeded(data) {
    productsObservable(data.results);
}

    var productsObservable= ko.observableArray([]);

原始结果显示了列表中第一个产品的3个组件的列表,而当我导航data.results [0] .component()时,我只得到数组中的一个组件。

当我浏览/ breeze / Breeze / products时,我看到了每个产品的所有组件。

我什么都错过了?这是我直接调用/ breeze / Breeze / products时得到的响应。

 {
    $id: "1",
    $type: "DD.Product, DD_Model",
    Id: 1,
    Name: "XXXX",
    Components: [
    {
        $id: "2",
        $type: "DD.Component, DD_Model",
        Id: 1,
        Name: "component1"
        Product: {
           $ref: "1"
         },
    },
    {
        $id: "3",
        $type: "DD.Component, DD_Model",
        Id: 2,
        Name: "component2"
        Product: {
          $ref: "1"
        },
    },
    {
        $id: "4",
        $type: "DD.Component, DD_Model",
        Id: 11,
        Name: "component3"
        Product: {
         $ref: "1"
        },
    }
    ],
  },

通过/ breeze / Breeze / metadata

从服务器检索对象元数据

1 个答案:

答案 0 :(得分:0)

在我看来,您正在使用两种不同的数据类型并将它们放入组件数组中。

我有一种感觉,当你获得JSON后,它具有这些附加属性,但它们不会映射到DD.Components,因为它们的类型为GCDMS.Models.CalibrationEquipment,GCDMS_Model。

修改

出于所有意图和目的,你所做的事情看起来是正确的,前提是你所展示的内容与返回的数据相符......等等。

我唯一可以建议的是,在返回结果之后,将它放在一个方法中并调用它 - console.log(entityManager.getEntities());并查看是否有3个组件并确保它们已正确映射回来。