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');
    }

データコンテキストにはモデルへの参照があり、データはデータベースから転送されて画面に表示されますが、フォーマットされていません。console.log()からの呼び出しは表示さuserInfoInitializer()れません。

4

1 に答える 1

2

エンティティを構築する場合、コンストラクタには構築するエンティティが必要です。上記のコードは試していませんが、Breeze がエンティティを渡し、そのエンティティ プロパティを指定する必要があると思います。これを使用します。うまくいくかもしれませんが、それは私にとって最初に際立っていることです.

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

2 番目 - モデル内のエンティティの名前は何ですか? UserInfo ですか、それとも単に User ですか? おそらくすでにこれを知っているでしょうが、コンストラクターを追加するときに、適切な名前のエンティティを使用していることを確認する必要があります。

3rd - キャメルケースを使用している場合は、プロパティの最初の文字を小文字のままにする必要があります。元 。user.email と user.createDate。

最後に、コンストラクターで「createDate」を作成しているのか、モデルから渡されているのかわかりません。それが実際にあなたが作成しているプロパティである場合は、ノックアウト監視可能または計算されたプロパティにすることをお勧めします。データベースからのものである場合は、次のようなことをする必要があります

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

データベースから返されるすべてのエンティティにはそのプロパティが与えられることに注意してください。そのため、例にすでに createDate があるエンティティがある場合は、その日付をオーバーライドしています。createDate を now に設定したい場合は、それをオブジェクトを作成しているメソッドに移動します。

于 2013-06-09T23:52:27.570 に答える