Как выполнять асинхронные вызовы в обработчике DataRequested (HTML)
[ Эта статья адресована разработчикам приложений среды выполнения Windows для Windows 8.x и Windows Phone 8.x. При разработке приложений для Windows 10 см. раздел последняя документация]
Здесь мы покажем вам, как создавать данные асинхронно в ответ на событие datarequested. Если ваше приложение выполняет асинхронные операции в ответ на событие datarequested, приложению нужно сначала получить объект DataRequestDeferral. Получение отсроченного объекта информирует систему, что ваш вызов для добавления данных в DataPackage может иметь место после возвращения делегата.
Примечание Для отправки только текста или ссылки вам не нужно использовать код, приведенный в этом разделе. Гораздо быстрее использовать методы setText и setUri.
Что необходимо знать
Технологии
Необходимые условия
- Вы должны уметь работать с программой Microsoft Visual Studio и связанными с ней шаблонами.
- Вам необходимо знать JavaScript.
- Вы должны знать, как получать файлы и другие данные, например, с помощью FileOpenPicker.
Инструкции
Этап 1: Настройка вашего приложения в качестве источника данных
Объект DataTransferManager — это основная начальная точка любой операции общего доступа. Вы добавите обработчик события datarequested для объекта DataTransferManager в обработчике события activated вашего приложения. Событие datarequested происходит, когда пользователь касается чудо-кнопки "Поделиться".
var dataTransferManager = Windows.ApplicationModel.DataTransfer.DataTransferManager.getForCurrentView();
dataTransferManager.addEventListener("datarequested", shareAsyncHandler);
Остальные шаги реализуют функцию shareAsyncHandler
.
Этап 2: Получение объекта DataRequest
Когда происходит событие datarequested, ваше приложение получает объект DataRequest. Этот объект содержит DataPackage, который вы можете использовать для предоставления содержимого, которым желает поделиться пользователь.
var request = e.request;
Этап 3: Настройка свойств заголовка и описания
request.data.properties.title = "Async Share Example";
request.data.properties.description =
"Demonstrates how to make asynchronous calls from a datarequested event handler.";
Этап 4: Получение отсроченного объекта
Для получения отсроченного объекта вызовите метод getDeferral.
var deferral = request.getDeferral();
Этап 5: Выполнение асинхронного вызова для подготовки данных
Для добавления содержимого вы можете использовать любой из методов, поддерживаемых экземпляром DataPackage. В данном случае для общего доступа к файлу мы используем setStorageItems.
Windows.ApplicationModel.Package.current.installedLocation.getFileAsync("images\\logo.png").done(function (storageFile) {
request.data.setStorageItems([storageFile]);
});
Этап 6: Вызов завершающего метода
Метод DataRequestDeferral.complete позволяет системе узнать, что данные готовы для общего доступа.
deferral.complete();
Вы должны также вызвать DataRequestDeferral.complete в обработчике ошибок асинхронного вызова.
Полный пример
function shareAsyncHandler(e) {
var request = e.request;
request.data.properties.title = "Async Share Example";
request.data.properties.description =
"Demonstrates how to make asynchronous calls from a datarequested event handler.";
var deferral = request.getDeferral();
Windows.ApplicationModel.Package.current.installedLocation.getFileAsync("images\\logo.png").done(function (storageFile) {
request.data.setStorageItems([storageFile]);
deferral.complete();
}, function (err) {
deferral.complete();
});
}
app.onactivated = function (args) {
if (args.detail.kind === activation.ActivationKind.launch) {
if (args.detail.previousExecutionState !== activation.ApplicationExecutionState.terminated) {
// This app was recently launched; register it as share source.
var dataTransferManager = Windows.ApplicationModel.DataTransfer.DataTransferManager.getForCurrentView();
dataTransferManager.addEventListener("datarequested", shareAsyncHandler);
} else {
// TODO: This app was reactivated from suspension.
// Restore the app state here.
}
args.setPromise(WinJS.UI.processAll());
}
};
Связанные разделы
Образец исходного приложения с общим доступом к содержимому
Поддержка операций отложенного общего доступа
Краткое руководство: общий доступ к содержимому