Описаны варианты задания значений по умолчанию в ember-flexberry-приложении.
Warning: Данная статья не завершена. Предложенный в статье вариант не является лучшим.
Описание
Существуют разные подходы к заданию значения по умолчанию в Ember-приложениях.
Один из подходов - использование на уровне модели defaultValue
.
Например:
var Model = BaseModel.extend({
firstName: DS.attr('string', { defaultValue: 'Test2602' }),
birthDate: DS.attr('date', {
defaultValue() { return new Date(); }
})
});
Warning: При сохранении определённой таким образом модели, если значение свойства не было изменено, то на сервер оно передано не будет.
Поэтому для задания значения по умолчанию, которое корректно будет сохраняться на сервере, проще использовать подход, когда инициализация происходит на форме создания.
Задание значения по умолчанию на форме создания
Задание значения по умолчанию может происходить на форме создания в роуте в afterModel.
Например, требуется в свойство “датаПроекта” задать текущую дату.
import EditFormNewRoute from 'ember-flexberry/routes/edit-form-new';
export default EditFormNewRoute.extend({
...
afterModel: function(model, transition) {
var date = new Date();
model.set('датаПроекта', date);
}
});
Более сложный вариант - это когда значение по умолчанию требуется получить с сервера. Например, требуется указать текущего пользователя в свойство ‘зарегистрировал’. В этом случае потребуется делать ajax-запрос на сервер. Пусть серверный метод GetCurrentUser
возвращает текущего пользователя, тогда код может быть следующим:
import Ember from 'ember';
import config from '../../config/environment';
import EditFormNewRoute from 'ember-flexberry/routes/edit-form-new';
export default EditFormNewRoute.extend({
...
afterModel: function(model, transition) {
var store = this.store;
Ember.$.ajax({
type: 'GET',
async: false,
url: config.APP.backendUrls.api + '/GetCurrentUser', // В "config.APP.backendUrls.api" записан путь до сервера.
success: function(result) {
if (result) {
store.pushPayload('some-project-пользователь', result); // Сначала результат преобразуем в модельку, которую поймёт Ember.
store.findRecord('some-project-пользователь', result.__PrimaryKey).then(function(person) {
model.set('зарегистрировал', person); // Находим эту полученную модельку и записываем в требуемое свойство.
});
}
}
});
}
});