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');