придумали несколько решений:
1) Измените метод SetProperty
Первый раствор придумал было изменить метод SetProperty; Поэтому в основном я проверяю, является ли входящее значение экземпляром Date, и в этом случае я превращаю его в экземпляр момента.
proto.setProperty = function (propertyName, value) {
//if (!this._backingStore.hasOwnProperty(propertyName)) {
// throw new Error("Unknown property name:" + propertyName);
//}
var val = value instanceof Date ? moment(value) : value;
this[propertyName] = val;
// allow setProperty chaining.
return this;
};
Мне не понравилось это решение по нескольким причинам. Прежде всего, дополнительная проверка выполняется каждый раз, когда устанавливается значение свойства; кроме того, мы можем передать экземпляр строки как значение свойства date, и в этом случае нам нужно добавить дополнительную логику для определения типа значения. Наконец, мы можем захотеть добавить ту же логику к другим адаптерам, так что мы закончим тем, что будем повторяться.
2) Переопределение метода DataType.parseDateFromServer
Второе решение должно было передать пользовательскую реализацию метода DataType.parseDateFromServer. То есть, в функции которой прилагает несколько конфигураций ветер, я добавил следующие строки кодов:
function parseDateAsMoment(source) {
return moment(source);
}
breeze.config.initializeAdapterInstance("modelLibrary", "backingStore", true);
breeze.DataType.parseDateFromServer = parseDateAsMoment;
3) Импорт propertyFormatters
Этого решение, которое я закончил пользуюсь. По сути, я расширил DataType с помощью метода registerPropFormatter.
DataType.registerPropFormatter = function(dataType, formatter) {
switch (dataType) {
case DataType.DateTime:
DataType.parseDateFromServer = formatter;
break;
case DataType.DateTimeOffset:
DataType.parseTimeFromServer = formatter;
break;
default:
}
},
В принципе, то, что этот метод не является, это позволяет нам импортировать пользовательский форматировщик для любого типа поддерживаемых типов данных.
Затем, во время инициализации ветер, я могу просто зарегистрировать мою собственность форматтеры:
function parseDateAsMoment(source) {
return moment(source);
}
breeze.config.initializeAdapterInstance("modelLibrary", "backingStore", true);
breeze.DataType.registerPropFormatter(breeze.DataType.DateTime, parseDateAsMoment);
я могу исправить это путем изменения исходного кода breezeJS; Но это не идеальное решение. – ppoliani
В документации API мало намеков на то, как создать свой собственный, если вы знаете, где искать. Я считаю, что ключ использует getProperty и setProperty прототипа сущностей и определяет, как «перехватывать» значения, но, вероятно, гораздо сложнее. +1 для внимания. –