Breeze registerEntityTypeCtor无法正常工作

时间:2013-06-09 11:22:58

标签: breeze hottowel

我正在开发Hottowel项目,我想将从数据库传递的一些数据格式化为Breeze,但看起来ctor没有注册。

我做错了什么?

datacontext.js

    var manager = configureManager();

    function configureManager() {
        var mng = new breeze.EntityManager('breeze/data');
        breeze.NamingConvention.camelCase.setAsDefault();
        model.configureMetadataStore(mng.metadataStore);

        return mng;
    }

model.js

    function configureMetadataStore(metadataStore) {
        metadataStore.registerEntityTypeCtor
            ('UserInfo', null, userInfoInitializer);
    }

    function userInfoInitializer() {
        if (this.Email == "")
            this.Email = '---';

        this.CreateDate = formatDateTime(this.CreateDate);
    }

    function formatDateTime(DateTime) {
        return moment.utc(DateTime).format('DD. MM. YYYY. [у] hh:mm');
    }

Datacontext具有对模型的引用,数据从数据库传输并显示在屏幕上,但未格式化。来自console.log()的{​​{1}}来电未出现。

1 个答案:

答案 0 :(得分:2)

当我构建一个实体时,我的构造函数需要有一个实体来构造。我没有尝试过上面的代码,但我相信Breeze传递了一个实体,你需要提供该实体属性。用这个。可以工作,但这是第一件让我感到高兴的事情。

function userInfoInitializer(user) {
    if (user.Email == "")
        user.Email = "---";

第二 - 您的模型中命名的实体是什么?是UserInfo还是只是用户?您可能已经知道这一点,但是您需要确保在添加构造函数时使用正确命名的实体。

3rd - 如果您使用camelCase,则需要将属性的第一个字母保留为小写。例如user.email和user.createDate。

最后,我无法判断您是在构造函数中创建'createDate'还是从模型传递。如果它确实是您正在创建的属性,我建议将其作为淘汰可观察或计算属性。如果它来自数据库,那么你需要做类似的事情

if (!user.createDate) { } //set it 

请记住,从数据库返回的所有实体都将获得该属性,因此如果您的示例中已经有一个createDate实体,那么您将覆盖该日期。如果您想将createDate设置为now,那么我会将其移动到您创建对象的方法中。