0

我正在阅读 John Papa 的 HotTowel 教程并将其调整为我自己的数据。我想将一个名为 startTime 的日期时间字段格式化为一个用时刻格式化的字符串,但初始化函数甚至没有被调用来添加计算字段。

在 datacontext.js 中:

 var getSessions = function (sessionsObservable) {

    var query = EntityQuery.from('Sessions').orderBy('startTime', 'title');
    return manager.executeQuery(query).then(querySucceded).fail(breezeQueryFailed);

    function querySucceded(data) {
        if (sessionsObservable) {
            sessionsObservable(data.results);
        }
        log('Retrieved Sessions', data, true);
    }
};



function configureBreezeManager() {
    breeze.NamingConvention.camelCase.setAsDefault();
    var mgr = new breeze.EntityManager(config.remoteServiceName);
    model.configureMetadataStore(mgr.metadataStore);
    return mgr;
}

在 model.js 中:

    function configureMetadataStore(metadataStore) {
    metadataStore.registerEntityTypeCtor('Sessions', null, sessionInitializer);
}


function sessionInitializer(session) {
    session.startDayTime = ko.computed(function () {
        var start = session.startTime();
        return start ? moment.utc(start).format('dddd h:mm a') : '';
    });
}

它返回从我的 API 中提取的所有数据,但不添加 startDayTime 计算字段。我在 sessionInitializer() 函数中放置了一个断点,但它甚至没有到达它。我错过了什么?更新到 Breeze 1.4.4 是否改变了应该完成的方式?

谢谢!

4

1 回答 1

2

问题是您将实体类型注册为“会话”(复数)而不是“会话”(单数)。它应该是:

 metadataStore.registerEntityTypeCtor('Session', null, sessionInitializer);

'Session'(单数)是实体类型的名称。你用这样的一行创建一个新的

var newSession = mgr.createEntity('Session');

“Sessions”(复数)是您在检索 Session 实体时定位的 Web API 查询资源名称。

var query = breeze.EntityQuery.from('Sessions');

很容易混淆两者。对不起。

FWIW,如所写,您的 metadataStore 认为它同时具有“会话”实体类型和“会话”实体类型。

于 2013-10-21T19:05:33.973 回答