Answered by:
Can anyone give sample code that actually works for a simple xhr request to pull local xml data to the visual studio 2012 grid layout template?

Question
-
I am very new to visual studio and the world of strict java script. I am trying to make an xhr request to a local xml file to populate the grid layout template. I am clueless as to how to proceed and I cant seem to find help that is specific to the grid layout template. The code I have so far is below:
(function () {
"use strict";
var list = new WinJS.Binding.List();
var groupedItems = list.createGrouped(
function groupKeySelector(item) { return item.group.key; },
function groupDataSelector(item) { return item.group; }
);
// 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);
//});
WinJS.xhr({ url: "/data/myxmlfile.xml"}).then(function (xhr) {
var items = item("item", xhr.response).innerText;
// Add the items to the WinJS.Binding.List
items.forEach(function (item) {
list.push(item);
});
});// I was working off the contoso cookbook example but it uses json, which won't work for my purposes
I know its a very noobish question and I am quite lost with my var items, at this point I'm guessing. But any help I can get will be very helpful and once I'm past this hurdle I can achieve what I need to achieve in CSS and HTML 5.
Thanks in advance for the response.
Wednesday, December 26, 2012 9:16 AM
Answers
-
Hi,
If the data file is xml at local. You needn't use winjs.xhr to do that. You could just use file read api. And the example as follow:
scriptdata.js
(function () { "use strict"; var uri = new Windows.Foundation.Uri("ms-appx:///listview_xhr/data.xml") Windows.Storage.StorageFile.getFileFromApplicationUriAsync(uri).then(function (file) { return Windows.Storage.FileIO.readTextAsync(file); }).done(function (text) { var xmlDoc = new Windows.Data.Xml.Dom.XmlDocument(); xmlDoc.loadXml(text); var nodes = xmlDoc.selectNodes("//book"); var items = new Array(); nodes.forEach(function (val, idx, travObj) { var title = val.selectSingleNode("title").innerText; var price = val.selectSingleNode("price").innerText; var newItem = { title: title, price: price }; items.push(newItem); }); var dataList = new WinJS.Binding.List(items); basicListView.winControl.itemDataSource = dataList.dataSource; }); })();
listview.html
<!-- default.html --> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>ListViewExample</title> <script src="/js/jquery.min.js"></script> <script src="/js/lazyload.js"></script> <!-- WinJS references --> <link href="//Microsoft.WinJS.1.0/css/ui-dark.css" rel="stylesheet"> <script src="//Microsoft.WinJS.1.0/js/base.js"></script> <script src="//Microsoft.WinJS.1.0/js/ui.js"></script> <!-- ListViewExample references --> <link href="/listview_xhr/default.css" rel="stylesheet"> <script src="/listview_xhr/default.js"></script> <script src="/listview_xhr/scriptdata.js"></script> <style type="text/css"> .row { width: 100%; margin: 0 auto; } .block { width: 100px; display: inline-block; } </style> </head> <body> <div id="mediumListIconTextTemplate" data-win-control="WinJS.Binding.Template"> <div style="width: 100px; height: 100px; background-color:white;"> <!-- Displays the "picture" field. --> <div> <!-- Displays the "title" field. --> <h4 data-win-bind="innerText: title" style="color:red;"></h4> <!-- Displays the "text" field. --> <h6 data-win-bind="innerText: text" style="color:black"></h6> </div> </div> </div> <div id="basicListView" data-win-control="WinJS.UI.ListView" data-win-options="{ itemTemplate: select('#mediumListIconTextTemplate'), layout: {type: WinJS.UI.GridLayout}, selectionMode: 'multi', tapBehavior : 'directSelect'}"> </div> <br /> </body> </html>
Any more question, please feel free to reply.Roy
MSDN Community Support | Feedback to us
Develop and promote your apps in Windows Store
Please remember to mark the replies as answers if they help and unmark them if they provide no help.- Marked as answer by Song Tian Wednesday, January 2, 2013 2:48 AM
Thursday, December 27, 2012 9:59 AM
All replies
-
Hi,
If the data file is xml at local. You needn't use winjs.xhr to do that. You could just use file read api. And the example as follow:
scriptdata.js
(function () { "use strict"; var uri = new Windows.Foundation.Uri("ms-appx:///listview_xhr/data.xml") Windows.Storage.StorageFile.getFileFromApplicationUriAsync(uri).then(function (file) { return Windows.Storage.FileIO.readTextAsync(file); }).done(function (text) { var xmlDoc = new Windows.Data.Xml.Dom.XmlDocument(); xmlDoc.loadXml(text); var nodes = xmlDoc.selectNodes("//book"); var items = new Array(); nodes.forEach(function (val, idx, travObj) { var title = val.selectSingleNode("title").innerText; var price = val.selectSingleNode("price").innerText; var newItem = { title: title, price: price }; items.push(newItem); }); var dataList = new WinJS.Binding.List(items); basicListView.winControl.itemDataSource = dataList.dataSource; }); })();
listview.html
<!-- default.html --> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>ListViewExample</title> <script src="/js/jquery.min.js"></script> <script src="/js/lazyload.js"></script> <!-- WinJS references --> <link href="//Microsoft.WinJS.1.0/css/ui-dark.css" rel="stylesheet"> <script src="//Microsoft.WinJS.1.0/js/base.js"></script> <script src="//Microsoft.WinJS.1.0/js/ui.js"></script> <!-- ListViewExample references --> <link href="/listview_xhr/default.css" rel="stylesheet"> <script src="/listview_xhr/default.js"></script> <script src="/listview_xhr/scriptdata.js"></script> <style type="text/css"> .row { width: 100%; margin: 0 auto; } .block { width: 100px; display: inline-block; } </style> </head> <body> <div id="mediumListIconTextTemplate" data-win-control="WinJS.Binding.Template"> <div style="width: 100px; height: 100px; background-color:white;"> <!-- Displays the "picture" field. --> <div> <!-- Displays the "title" field. --> <h4 data-win-bind="innerText: title" style="color:red;"></h4> <!-- Displays the "text" field. --> <h6 data-win-bind="innerText: text" style="color:black"></h6> </div> </div> </div> <div id="basicListView" data-win-control="WinJS.UI.ListView" data-win-options="{ itemTemplate: select('#mediumListIconTextTemplate'), layout: {type: WinJS.UI.GridLayout}, selectionMode: 'multi', tapBehavior : 'directSelect'}"> </div> <br /> </body> </html>
Any more question, please feel free to reply.Roy
MSDN Community Support | Feedback to us
Develop and promote your apps in Windows Store
Please remember to mark the replies as answers if they help and unmark them if they provide no help.- Marked as answer by Song Tian Wednesday, January 2, 2013 2:48 AM
Thursday, December 27, 2012 9:59 AM -
Thanks for the response Roy. First of all, I voted your response as helpful because I didn't know I could pull xml data locally in any other way apart from using winjs.xhr. That said, I am still having trouble applying this method to the grid app template for html5/java script in Visual studio 2012 express.
For the grid app template can I just replace data.js with the code in your example (I have tried this and received errors like, "Unable to get property 'innerText'", "Expected token 'EOF' found '>'" -- I was trying to traverse my xml and I understand winjs does not support xpath)? I am trying to avoid starting a template from blank because the grid template seems to have already taken care of a bunch of important features (snap, navigation e.t.c.)
Also if it helps, my xml is structured as below (I used VS to create a schema for the xml file):
<?xml version="1.0" encoding="UTF-8" ?> <rulesroot> <display-name></display-name> <title> <display-name></display-name> <data> </data> <rule> <display-name></display-name> <data> </data> </rule> </title> </rulesroot>
Are there additional web resources you can recommend on using the file read api in windows 8 app development?
________________
Also for ease of access to the grid layout data.js I have added the code below:
(function () { "use strict"; var list = new WinJS.Binding.List(); var groupedItems = list.createGrouped( function groupKeySelector(item) { return item.group.key; }, function groupDataSelector(item) { return item.group; } ); // 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); }); WinJS.Namespace.define("Data", { items: groupedItems, groups: groupedItems.groups, getItemReference: getItemReference, getItemsFromGroup: getItemsFromGroup, resolveGroupReference: resolveGroupReference, resolveItemReference: resolveItemReference }); // Get a reference for an item, using the group key and item title as a // unique reference to the item that can be easily serialized. function getItemReference(item) { return [item.group.key, item.title]; } // This function returns a WinJS.Binding.List containing only the items // that belong to the provided group. function getItemsFromGroup(group) { return list.createFiltered(function (item) { return item.group.key === group.key; }); } // Get the unique group corresponding to the provided group key. function resolveGroupReference(key) { for (var i = 0; i < groupedItems.groups.length; i++) { if (groupedItems.groups.getAt(i).key === key) { return groupedItems.groups.getAt(i); } } } // Get a unique item from the provided string array, which should contain a // group key and an item title. function resolveItemReference(reference) { for (var i = 0; i < groupedItems.length; i++) { var item = groupedItems.getAt(i); if (item.group.key === reference[0] && item.title === reference[1]) { return item; } } } // Returns an array of sample data that can be added to the application's // data list. function generateSampleData() { var itemContent = "<p>Curabitur class aliquam vestibulum nam curae maecenas sed integer cras phasellus suspendisse quisque donec dis praesent accumsan bibendum pellentesque condimentum adipiscing etiam consequat vivamus dictumst aliquam duis convallis scelerisque est parturient ullamcorper aliquet fusce suspendisse nunc hac eleifend amet blandit facilisi condimentum commodo scelerisque faucibus aenean ullamcorper ante mauris dignissim consectetuer nullam lorem vestibulum habitant conubia elementum pellentesque morbi facilisis arcu sollicitudin diam cubilia aptent vestibulum auctor eget dapibus pellentesque inceptos leo egestas interdum nulla consectetuer suspendisse adipiscing pellentesque proin lobortis sollicitudin augue elit mus congue fermentum parturient fringilla euismod feugiat</p><p>Curabitur class aliquam vestibulum nam curae maecenas sed integer cras phasellus suspendisse quisque donec dis praesent accumsan bibendum pellentesque condimentum adipiscing etiam consequat vivamus dictumst aliquam duis convallis scelerisque est parturient ullamcorper aliquet fusce suspendisse nunc hac eleifend amet blandit facilisi condimentum commodo scelerisque faucibus aenean ullamcorper ante mauris dignissim consectetuer nullam lorem vestibulum habitant conubia elementum pellentesque morbi facilisis arcu sollicitudin diam cubilia aptent vestibulum auctor eget dapibus pellentesque inceptos leo egestas interdum nulla consectetuer suspendisse adipiscing pellentesque proin lobortis sollicitudin augue elit mus congue fermentum parturient fringilla euismod feugiat</p><p>Curabitur class aliquam vestibulum nam curae maecenas sed integer cras phasellus suspendisse quisque donec dis praesent accumsan bibendum pellentesque condimentum adipiscing etiam consequat vivamus dictumst aliquam duis convallis scelerisque est parturient ullamcorper aliquet fusce suspendisse nunc hac eleifend amet blandit facilisi condimentum commodo scelerisque faucibus aenean ullamcorper ante mauris dignissim consectetuer nullam lorem vestibulum habitant conubia elementum pellentesque morbi facilisis arcu sollicitudin diam cubilia aptent vestibulum auctor eget dapibus pellentesque inceptos leo egestas interdum nulla consectetuer suspendisse adipiscing pellentesque proin lobortis sollicitudin augue elit mus congue fermentum parturient fringilla euismod feugiat</p><p>Curabitur class aliquam vestibulum nam curae maecenas sed integer cras phasellus suspendisse quisque donec dis praesent accumsan bibendum pellentesque condimentum adipiscing etiam consequat vivamus dictumst aliquam duis convallis scelerisque est parturient ullamcorper aliquet fusce suspendisse nunc hac eleifend amet blandit facilisi condimentum commodo scelerisque faucibus aenean ullamcorper ante mauris dignissim consectetuer nullam lorem vestibulum habitant conubia elementum pellentesque morbi facilisis arcu sollicitudin diam cubilia aptent vestibulum auctor eget dapibus pellentesque inceptos leo egestas interdum nulla consectetuer suspendisse adipiscing pellentesque proin lobortis sollicitudin augue elit mus congue fermentum parturient fringilla euismod feugiat</p><p>Curabitur class aliquam vestibulum nam curae maecenas sed integer cras phasellus suspendisse quisque donec dis praesent accumsan bibendum pellentesque condimentum adipiscing etiam consequat vivamus dictumst aliquam duis convallis scelerisque est parturient ullamcorper aliquet fusce suspendisse nunc hac eleifend amet blandit facilisi condimentum commodo scelerisque faucibus aenean ullamcorper ante mauris dignissim consectetuer nullam lorem vestibulum habitant conubia elementum pellentesque morbi facilisis arcu sollicitudin diam cubilia aptent vestibulum auctor eget dapibus pellentesque inceptos leo egestas interdum nulla consectetuer suspendisse adipiscing pellentesque proin lobortis sollicitudin augue elit mus congue fermentum parturient fringilla euismod feugiat</p><p>Curabitur class aliquam vestibulum nam curae maecenas sed integer cras phasellus suspendisse quisque donec dis praesent accumsan bibendum pellentesque condimentum adipiscing etiam consequat vivamus dictumst aliquam duis convallis scelerisque est parturient ullamcorper aliquet fusce suspendisse nunc hac eleifend amet blandit facilisi condimentum commodo scelerisque faucibus aenean ullamcorper ante mauris dignissim consectetuer nullam lorem vestibulum habitant conubia elementum pellentesque morbi facilisis arcu sollicitudin diam cubilia aptent vestibulum auctor eget dapibus pellentesque inceptos leo egestas interdum nulla consectetuer suspendisse adipiscing pellentesque proin lobortis sollicitudin augue elit mus congue fermentum parturient fringilla euismod feugiat</p><p>Curabitur class aliquam vestibulum nam curae maecenas sed integer cras phasellus suspendisse quisque donec dis praesent accumsan bibendum pellentesque condimentum adipiscing etiam consequat vivamus dictumst aliquam duis convallis scelerisque est parturient ullamcorper aliquet fusce suspendisse nunc hac eleifend amet blandit facilisi condimentum commodo scelerisque faucibus aenean ullamcorper ante mauris dignissim consectetuer nullam lorem vestibulum habitant conubia elementum pellentesque morbi facilisis arcu sollicitudin diam cubilia aptent vestibulum auctor eget dapibus pellentesque inceptos leo egestas interdum nulla consectetuer suspendisse adipiscing pellentesque proin lobortis sollicitudin augue elit mus congue fermentum parturient fringilla euismod feugiat"; var itemDescription = "Item Description: Pellentesque porta mauris quis interdum vehicula urna sapien ultrices velit nec venenatis dui odio in augue cras posuere enim a cursus convallis neque turpis malesuada erat ut adipiscing neque tortor ac erat"; var groupDescription = "Group Description: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus tempor scelerisque lorem in vehicula. Aliquam tincidunt, lacus ut sagittis tristique, turpis massa volutpat augue, eu rutrum ligula ante a ante"; // These three strings encode placeholder images. You will want to set the // backgroundImage property in your real data to be URLs to images. var darkGray = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXY3B0cPoPAANMAcOba1BlAAAAAElFTkSuQmCC"; var lightGray = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXY7h4+cp/AAhpA3h+ANDKAAAAAElFTkSuQmCC"; var mediumGray = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXY5g8dcZ/AAY/AsAlWFQ+AAAAAElFTkSuQmCC"; // Each of these sample groups must have a unique key to be displayed // separately. var sampleGroups = [ { key: "group1", title: "Group Title: 1", subtitle: "Group Subtitle: 1", backgroundImage: darkGray, description: groupDescription }, { key: "group2", title: "Group Title: 2", subtitle: "Group Subtitle: 2", backgroundImage: lightGray, description: groupDescription }, { key: "group3", title: "Group Title: 3", subtitle: "Group Subtitle: 3", backgroundImage: mediumGray, description: groupDescription }, { key: "group4", title: "Group Title: 4", subtitle: "Group Subtitle: 4", backgroundImage: lightGray, description: groupDescription }, { key: "group5", title: "Group Title: 5", subtitle: "Group Subtitle: 5", backgroundImage: mediumGray, description: groupDescription }, { key: "group6", title: "Group Title: 6", subtitle: "Group Subtitle: 6", backgroundImage: darkGray, description: groupDescription } ]; // Each of these sample items should have a reference to a particular // group. var sampleItems = [ { group: sampleGroups[0], title: "Item Title: 1", subtitle: "Item Subtitle: 1", description: itemDescription, content: itemContent, backgroundImage: lightGray }, { group: sampleGroups[0], title: "Item Title: 2", subtitle: "Item Subtitle: 2", description: itemDescription, content: itemContent, backgroundImage: darkGray }, { group: sampleGroups[0], title: "Item Title: 3", subtitle: "Item Subtitle: 3", description: itemDescription, content: itemContent, backgroundImage: mediumGray }, { group: sampleGroups[0], title: "Item Title: 4", subtitle: "Item Subtitle: 4", description: itemDescription, content: itemContent, backgroundImage: darkGray }, { group: sampleGroups[0], title: "Item Title: 5", subtitle: "Item Subtitle: 5", description: itemDescription, content: itemContent, backgroundImage: mediumGray }, { group: sampleGroups[1], title: "Item Title: 1", subtitle: "Item Subtitle: 1", description: itemDescription, content: itemContent, backgroundImage: darkGray }, { group: sampleGroups[1], title: "Item Title: 2", subtitle: "Item Subtitle: 2", description: itemDescription, content: itemContent, backgroundImage: mediumGray }, { group: sampleGroups[1], title: "Item Title: 3", subtitle: "Item Subtitle: 3", description: itemDescription, content: itemContent, backgroundImage: lightGray }, { group: sampleGroups[2], title: "Item Title: 1", subtitle: "Item Subtitle: 1", description: itemDescription, content: itemContent, backgroundImage: mediumGray }, { group: sampleGroups[2], title: "Item Title: 2", subtitle: "Item Subtitle: 2", description: itemDescription, content: itemContent, backgroundImage: lightGray }, { group: sampleGroups[2], title: "Item Title: 3", subtitle: "Item Subtitle: 3", description: itemDescription, content: itemContent, backgroundImage: darkGray }, { group: sampleGroups[2], title: "Item Title: 4", subtitle: "Item Subtitle: 4", description: itemDescription, content: itemContent, backgroundImage: lightGray }, { group: sampleGroups[2], title: "Item Title: 5", subtitle: "Item Subtitle: 5", description: itemDescription, content: itemContent, backgroundImage: mediumGray }, { group: sampleGroups[2], title: "Item Title: 6", subtitle: "Item Subtitle: 6", description: itemDescription, content: itemContent, backgroundImage: darkGray }, { group: sampleGroups[2], title: "Item Title: 7", subtitle: "Item Subtitle: 7", description: itemDescription, content: itemContent, backgroundImage: mediumGray }, { group: sampleGroups[3], title: "Item Title: 1", subtitle: "Item Subtitle: 1", description: itemDescription, content: itemContent, backgroundImage: darkGray }, { group: sampleGroups[3], title: "Item Title: 2", subtitle: "Item Subtitle: 2", description: itemDescription, content: itemContent, backgroundImage: lightGray }, { group: sampleGroups[3], title: "Item Title: 3", subtitle: "Item Subtitle: 3", description: itemDescription, content: itemContent, backgroundImage: darkGray }, { group: sampleGroups[3], title: "Item Title: 4", subtitle: "Item Subtitle: 4", description: itemDescription, content: itemContent, backgroundImage: lightGray }, { group: sampleGroups[3], title: "Item Title: 5", subtitle: "Item Subtitle: 5", description: itemDescription, content: itemContent, backgroundImage: mediumGray }, { group: sampleGroups[3], title: "Item Title: 6", subtitle: "Item Subtitle: 6", description: itemDescription, content: itemContent, backgroundImage: lightGray }, { group: sampleGroups[4], title: "Item Title: 1", subtitle: "Item Subtitle: 1", description: itemDescription, content: itemContent, backgroundImage: lightGray }, { group: sampleGroups[4], title: "Item Title: 2", subtitle: "Item Subtitle: 2", description: itemDescription, content: itemContent, backgroundImage: darkGray }, { group: sampleGroups[4], title: "Item Title: 3", subtitle: "Item Subtitle: 3", description: itemDescription, content: itemContent, backgroundImage: lightGray }, { group: sampleGroups[4], title: "Item Title: 4", subtitle: "Item Subtitle: 4", description: itemDescription, content: itemContent, backgroundImage: mediumGray }, { group: sampleGroups[5], title: "Item Title: 1", subtitle: "Item Subtitle: 1", description: itemDescription, content: itemContent, backgroundImage: lightGray }, { group: sampleGroups[5], title: "Item Title: 2", subtitle: "Item Subtitle: 2", description: itemDescription, content: itemContent, backgroundImage: darkGray }, { group: sampleGroups[5], title: "Item Title: 3", subtitle: "Item Subtitle: 3", description: itemDescription, content: itemContent, backgroundImage: mediumGray }, { group: sampleGroups[5], title: "Item Title: 4", subtitle: "Item Subtitle: 4", description: itemDescription, content: itemContent, backgroundImage: darkGray }, { group: sampleGroups[5], title: "Item Title: 5", subtitle: "Item Subtitle: 5", description: itemDescription, content: itemContent, backgroundImage: lightGray }, { group: sampleGroups[5], title: "Item Title: 6", subtitle: "Item Subtitle: 6", description: itemDescription, content: itemContent, backgroundImage: mediumGray }, { group: sampleGroups[5], title: "Item Title: 7", subtitle: "Item Subtitle: 7", description: itemDescription, content: itemContent, backgroundImage: darkGray }, { group: sampleGroups[5], title: "Item Title: 8", subtitle: "Item Subtitle: 8", description: itemDescription, content: itemContent, backgroundImage: lightGray } ]; return sampleItems; } })();
Thursday, December 27, 2012 8:12 PM -
Hi,
I have uploaded the demo to skydrive. You could find that at https://skydrive.live.com/?cid=6B6C9082658DF18D&id=6B6C9082658DF18D%21121 .
Any more question, please feel free to reply.
Roy
MSDN Community Support | Feedback to us
Develop and promote your apps in Windows Store
Please remember to mark the replies as answers if they help and unmark them if they provide no help.Friday, December 28, 2012 2:56 AM