我正在开发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}}来电未出现。
答案 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,那么我会将其移动到您创建对象的方法中。