Главная » Статьи » Visual Studio 2012 » Создание с помощью JavaScript |
В этом руководстве рассматривается использование шаблона Visual Studio Split App для создания программы чтения блогов. Вы научитесь:
Совет Если вы хотите пропустить учебник и перейти прямо к коду, см. раздел Начало работы с JavaScript: полный код для серии учебников. Перед началом работы...
Программа чтения блогов группы разработчиков WindowsВ этом учебнике описано создание простого приложения для чтения блогов Windows Team Blogs. На следующих рисунках показано, как будет выглядеть законченное приложение. Страница элементов содержит заголовок "Windows Team Blogs" и элемент управления ListView, содержащий по одному элементу из каждого блога. Когда вы щелкаете элемент в ListView, открывается разделенная страница выбранного блога. Разделенная страница состоит из элемента управления ListView, содержащего по одному элементу из каждой записи блога, и элемента управления, который отображает содержимое выбранной записи блога в книжной ориентации. С разделенной страницы можно перейти на страницу сведений об элементе. В верхней части этой страницы отображается заголовок записи блога, а содержимое выбранной записи отображается в альбомной ориентации. Создайте новый проект в Visual StudioСначала создадим новый проект
Ниже показано окно Solution Explorer (Обозреватель решений) со структурой проекта. Папка для страниц содержит две категории файлов: одна для страниц элементов, другая для страниц разбиения. Каждая из этих групп является PageControl — группой файлов HTML, CSS и JavaScript, которые определяют, на какую страницу может переходить приложение или какую страницу использовать в качестве пользовательского элемента управления. Новый проект содержит файлы HTML, CSS и JavaScript, которые требуются для создания элементов PageControl и разбиения PageControl. Позднее мы добавим файлы для сведений об элементе PageControl. Подробнее об этих шаблонах можно узнать в разделе Шаблоны проектов JavaScript для приложений Магазина Windows. Запуск приложения Магазина WindowsЕсли вы хотите увидеть, как выглядит простое разделенное приложение, нажмите клавишу F5, чтобы построить, развернуть и запустить приложение. Приложение запускается в полноэкранном режиме в виде страницы с заголовком "WindowsBlogReader" и списком образцов, отображаемых в виде сетки. Каждый элемент представляет группу данных. Коснитесь или щелкните элемент в списке, чтобы перейти на разделенную страницу. Разделенная страница состоит из двух основных частей. В левой части отображается список элементов, связанных с выбранной группой. В правой части отображается содержимое выбранного элемента. Чтобы вернуться на страницу элементов, коснитесь или щелкните кнопку "Back" (Назад) на странице. При запуске приложение берет код HTML, CSS и JavaScript (или ссылки на него) в items.html и добавляет его на страницу default.html, которая является начальной страницей приложения. Возможности кода, запускаемого в контейнере приложения, ограничены. Например, ваше приложение не сможет получить доступ к Интернету или веб-камере до тех пор, пока вы не объявите, что приложению требуется этот доступ, а пользователь при установке приложения не предоставит разрешения на доступ к ним. Чтобы получить дополнительные сведения, откройте файл package.appxmanifest и выберите вкладку Capabilities (Возможности). Изменение заголовка и цвета фонаВыполним две простые задачи настройки приложения. Чтобы изменить заголовок приложения, откройте файл items.html и замените текст в элементе h1 раздела <h1 class="titlearea win-type-ellipsis"> <span class="pagetitle">Windows Team Blogs</span> </h1> Чтобы задать цвет фона, откройте файл default.css и добавьте атрибут background-color в разделе #contenthost { height: 100%; width: 100%; background-color: #0A2562; } Чтобы построить, развернуть и запустить приложение, нажмите клавишу F5. Обратите внимание, что заголовок страницы элементов изменился, а фон страницы элементов и разделенной страницы стал синим.
Замена демонстрационных данныхШаблон проекта содержит демонстрационные данные, которые отображаются при запуске приложения. Выполните следующие действия, чтобы вместо демонстрационных данных использовать данные из веб-канала Atom блогов Windows Team Blogs.
Удаление демонстрационных данныхОткройте файл data.js, который содержит демонстрационные данные, используемые приложением. Вы можете удалить функцию // Returns an array of sample data that can be added to the application's // data list. function generateSampleData() { // Omitted code. } Вы можете удалить следующий код, поскольку он не потребуется: // TODO: Replace the data with your real data. // You can add data from asynchronous sources whenever it becomes available. generateSampleData().forEach(function (item) { list.push(item); }); Задание переменных и функцийДобавьте этот код в data.js прямо перед определением // Set up array variables var dataPromises = []; var blogs; // Create a data binding for our ListView var blogPosts = new WinJS.Binding.List(); // Process the blog feeds function getFeeds() { // Create an object for each feed in the blogs array // Get the content for each feed in the blogs array // Return when all asynchronous operations are complete } function acquireSyndication(url) { // Call xhr for the URL to get results asynchronously } function getBlogPosts() { // Walk the results to retrieve the blog posts } function getItemsFromXml(articleSyndication, bPosts, feed) { // Get the info for each blog post } Определение списка блоговЧтобы не усложнять наш образец, добавим готовый список URL-адресов в массив Добавьте этот код в функцию // Create an object for each feed in the blogs array blogs = [ { key: "blog1", url: 'http://blogs.windows.com/skydrive/b/skydrive/atom.aspx', title: 'tbd', updated: 'tbd', acquireSyndication: acquireSyndication, dataPromise: null }, { key: "blog2", url: 'http://blogs.windows.com/windows/b/windowsexperience/atom.aspx', title: 'tbd', updated: 'tbd', acquireSyndication: acquireSyndication, dataPromise: null }, { key: "blog3", url: 'http://blogs.windows.com/windows/b/extremewindows/atom.aspx', title: 'tbd', updated: 'tbd', acquireSyndication: acquireSyndication, dataPromise: null }, { key: "blog4", url: 'http://blogs.windows.com/windows/b/business/atom.aspx', title: 'tbd', updated: 'tbd', acquireSyndication: acquireSyndication, dataPromise: null }, { key: "blog5", url: 'http://blogs.windows.com/windows/b/bloggingwindows/atom.aspx', title: 'tbd', updated: 'tbd', acquireSyndication: acquireSyndication, dataPromise: null }, { key: "blog6", url: 'http://blogs.windows.com/windows/b/windowssecurity/atom.aspx', title: 'tbd', updated: 'tbd', acquireSyndication: acquireSyndication, dataPromise: null }, { key: "blog7", url: 'http://blogs.windows.com/windows/b/springboard/atom.aspx', title: 'tbd', updated: 'tbd', acquireSyndication: acquireSyndication, dataPromise: null }, { key: "blog8", url: 'http://blogs.windows.com/windows/b/windowshomeserver/atom.aspx', title: 'tbd', updated: 'tbd', acquireSyndication: acquireSyndication, dataPromise: null }, { key: "blog9", url: 'http://blogs.windows.com/windows_live/b/developer/atom.aspx', title: 'tbd', updated: 'tbd', acquireSyndication: acquireSyndication, dataPromise: null }, { key: "blog10", url: 'http://blogs.windows.com/ie/b/ie/atom.aspx', title: 'tbd', updated: 'tbd', acquireSyndication: acquireSyndication, dataPromise: null }, { key: "blog11", url: 'http://blogs.windows.com/windows_phone/b/wpdev/atom.aspx', title: 'tbd', updated: 'tbd', acquireSyndication: acquireSyndication, dataPromise: null }, { key: "blog12", url: 'http://blogs.windows.com/windows_phone/b/wmdev/atom.aspx', title: 'tbd', updated: 'tbd', acquireSyndication: acquireSyndication, dataPromise: null }]; Извлечение данных веб-каналаВ этом разделе для управления веб-каналами мы используем библиотеку Windows для JavaScript. Добавьте следующий код в функцию // Call xhr for the URL to get results asynchronously return WinJS.xhr( { url: url, headers: { "If-Modified-Since": "Mon, 27 Mar 1972 00:00:00 GMT" } }); Добавим код в функцию // Get the content for each feed in the blogs array blogs.forEach(function (feed) { feed.dataPromise = feed.acquireSyndication(feed.url); dataPromises.push(feed.dataPromise); }); // Return when all asynchronous operations are complete return WinJS.Promise.join(dataPromises).then(function () { return blogs; }); Затем необходимо добавить этот код в функцию Если // Walk the results to retrieve the blog posts getFeeds().then(function () { // Process each blog blogs.forEach(function (feed) { feed.dataPromise.then(function (articlesResponse) { var articleSyndication = articlesResponse.responseXML; if (articleSyndication) { // Get the blog title feed.title = articleSyndication.querySelector("feed > title").textContent; // Use the date of the latest post as the last updated date var published = articleSyndication.querySelector("feed > entry > published").textContent; // Convert the date for display var date = new Date(published); var dateFmt = new Windows.Globalization.DateTimeFormatting.DateTimeFormatter( "month.abbreviated day year.full"); var blogDate = dateFmt.format(date); feed.updated = "Last updated " + blogDate; // Get the blog posts getItemsFromXml(articleSyndication, blogPosts, feed); } else { // There was an error loading the blog. feed.title = "Error loading blog"; feed.updated = "Error"; blogPosts.push({ group: feed, key: "Error loading blog", title: feed.url, author: "Unknown", month: "?", day: "?", year: "?", content: "Unable to load the blog at " + feed.url }); } }); }); }); return blogPosts; В завершение необходимо добавить следующий код в функцию // Get the info for each blog post var posts = articleSyndication.querySelectorAll("entry"); // Process each blog post for (var postIndex = 0; postIndex < posts.length; postIndex++) { var post = posts[postIndex]; // Get the title, author, and date published var postTitle = post.querySelector("title").textContent; var postAuthor = post.querySelector("author > name").textContent; var postPublished = post.querySelector("published").textContent; // Convert the date for display var postDate = new Date(postPublished); var monthFmt = new Windows.Globalization.DateTimeFormatting.DateTimeFormatter( "month.abbreviated"); var dayFmt = new Windows.Globalization.DateTimeFormatting.DateTimeFormatter( "day"); var yearFmt = new Windows.Globalization.DateTimeFormatting.DateTimeFormatter( "year.full"); var blogPostMonth = monthFmt.format(postDate); var blogPostDay = dayFmt.format(postDate); var blogPostYear = yearFmt.format(postDate); // Process the content so it displays nicely var staticContent = toStaticHTML(post.querySelector("content").textContent); // Store the post info we care about in the array bPosts.push({ group: feed, key: feed.title, title: postTitle, author: postAuthor, month: blogPostMonth.toUpperCase(), day: blogPostDay, year: blogPostYear, content: staticContent }); } Источник: http://msdn.microsoft.com/ru-ru/library/windows/apps/ | |
Просмотров: 1468
| Теги: |
Всего комментариев: 0 | |