0

我正在做一个 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()来自的电话userInfoInitializer()没有出现。

4

1 回答 1

2

当我构造一个实体时,我的构造函数需要有一个实体来构造。我没有尝试过你上面的代码,但我相信微风传递了一个实体,你需要给那个实体属性。使用这个。可以工作,但这是我最突出的第一件事。

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

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

第三 - 如果您使用的是 camelCase,那么您需要将属性的第一个字母保留为小写。前任 。user.email 和 user.createDate。

最后,我不知道您是在构造函数中创建“createDate”还是从模型中传递。如果它确实是您正在创建的属性,我建议将其设为可淘汰的可观察或计算属性。如果它来自数据库,那么您需要执行类似的操作

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

请记住,从数据库返回的所有实体都将被赋予该属性,因此,如果您的示例中的实体已经具有 createDate,则您将覆盖该日期。如果您想将 createDate 设置为现在,那么我会将其移至您创建对象的方法中。

于 2013-06-09T23:52:27.570 回答