basis.net.action используется для создания прозрачного интерфейса между моделью данных приложения и серверным API.
var User = basis.entity.createType('User', {
id: basis.entity.IntId,
title: String
});
User.extend({
save: basis.net.action.create({
url: '/users',
method: 'POST',
request: function(){
return {
postBody: JSON.stringify({
userId: this.getId(),
title: this.data.title
})
};
},
success: function(data){
this.update(data);
}
})
});
var user = User(123);
user.set('title', 'John');
user.save();
Функция basis.net.action.create по переданному конфигу создает экземляр транспорта и возвращает функцию, которая вызывает метод request созданного экземпляра. При этом состояние модели синхронизируется с состоянием запроса, так при старте модель переходит в состояние processing, при успешном выполнении запроса - в состояние ready, а при ошибке - в состояние error.
При создании basis.net.action в качестве параметров может быть использован следующий набор функций:
request() - результат функции будет передан в метод request транспорта;prepare() - вызывается перед отправкой запроса и служит для подготовки данных;start() - вызывается при отправке запроса;success(data) - вызывается при успешном выполнении запроса;failure(error) - вызывается при неудачном выполнении запроса;abort() - вызывается при отмене запроса;сomplete() - вызывается при завершении запроса независимо от его статуса.Все перечисленные выше функции вызываются в контексте модели и, следовательно, имеют доступ к ее свойстам и методам.
В функцию prepare передаются те же параметры, что были переданы при вызове basis.net.action.
User.extend({
save: basis.net.action.create({
...
prepare: function(newTitle){
this.set('title', newTitle);
},
...
})
});
user.save('Anna');