属性未映射,空实体,Breeze与NoDB / PHP / Doctrine

时间:2013-07-29 12:29:10

标签: javascript breeze

我通过定义模型(到目前为止只有一个实体/模型)提供了元数据:

function init(store){
        addSerieType(store);
    }

    function addSerieType(store){
        store.addEntityType({
            shortName: "Serie",
            namespace: "xxx",
            defaultResourceName: "Serien",
            //autoGeneratedKeyType: breeze.AutoGeneratedKeyType.Identity,
            dataProperties:{
                id: { dataType: breeze.DataType.Int32, isNullable: false, isPartOfKey: true },
                kat: { dataType: breeze.DataType.Int32, isNullable: false },
                bez: { dataType: breeze.DataType.String, maxLength: 64, isNullable: false, 
                    validators: [ breeze.Validator.required(), breeze.Validator.maxLength( {maxLength: 64})]     // Add client-side validation to 'title' 
                },
                jahr: { dataType: breeze.DataType.Int32, isNullable: false },
                grp: { dataType: breeze.DataType.Int32, isNullable: false },
                bem: { dataType: breeze.DataType.String, maxLength: 1024, isNullable: false, 
                    validators: [ breeze.Validator.maxLength( {maxLength: 1024})]     // Add client-side validation to 'title' 
                }
            }
        });

        store.setEntityTypeForResourceName("Serien", "Serie");
        store.registerEntityTypeCtor("Serie", null, serieInitializer);
    }

    function serieInitializer(serie){
        serie.errorMessage = ko.observable();
    }

    return{
        init: init
    }

从PHP / Doctrine返回的JSON包括$id="Serie.id"列(例如1,2,3 ...)和$type="Serie"。所有列和属性名称均为小写,NamingConvention设置为none。我得到一个空实体 - 提供默认值。

对于测试,我创建了一个像这样的新实体:

var s = manager.createEntity("Serie", { id: 42, bez: "Test1", jahr: 2999} );

这是有效的,我在实体中得到ko.observable属性,实体被实现到缓存。

为什么我从JSON结果中获取实体?我已将服务器元数据设置为false,提供模型,一切都匹配,但......实体为空。完全没有错误。任何提示?感谢。

3 个答案:

答案 0 :(得分:0)

您的查询是什么样的? Breeze需要知道为任何查询返回的EntityType,这可以通过以下任何来完成:

  • 通过在。中建立的ResourceName / EntityType映射 MetadataStore。这可以添加到使用 MetadataStore.setEntityTypeForResourceName方法
  • 通过toType()调用 在您的EntityQuery()
  • 通过规范 DataService或EntityQuery的JsonResultsAdapter。 “默认”JsonResultsAdapter假定JSON.NET序列化,这不太适用于PHP后端,因此您可能希望为PHP创建自定义JsonResultsAdapter并将其添加到DataService。

Breeze无法将查询结果映射到实体类型的标准症状是结果不会变为“observables”。如果Breeze无法确定任何返回结果的EntityType,则只需将它们保留为“原生”json格式。

答案 1 :(得分:0)

请查看this similar StackOverflow question我将引导您完成诊断。提出该问题的人也在使用PHP服务器。

答案 2 :(得分:0)

(这可能对任何人都有帮助)

如果您正在使用Doctrine 2(PHP)和breeze js,您可以尝试使用此库:https://github.com/adrotec/breeze.server.php