jqxDataAdapter

jqxDataAdapter represents a jQuery plug-in which simplifies data binding and data operations and supports binding to local and remote data. It supports the following data types: 'xml', 'json', 'csv', 'tsv', 'array', 'observablearray', and the observable collection provided by Knockout. Many jQWidgets like the jqxListBox, jqxDropDownList, jqxComboBox, jqxGrid and jqxChart support data binding through the jqxDataAdapter plug-in.

var dataAdapter = new $.jqx.dataAdapter(source, settings)

source: A set of key/value pairs that configure the jqxDataAdapter's source object.

Data fields mapping with XML Data

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<feed xml:base="http://services.odata.org/Northwind/Northwind.svc/" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="http://www.w3.org/2005/Atom">
<title type="text">Customers</title>
<updated>2011-11-30T11:39:28Z</updated>
<link rel="self" title="Customers" href="Customers" />
<entry>
  <title type="text"></title>
  <updated>2011-11-30T11:39:28Z</updated>
  <author>
    <name />
  </author>
  <content type="application/xml">
    <m:properties>
      <d:CustomerID>ALFKI</d:CustomerID>
      <d:CompanyName>Alfreds Futterkiste</d:CompanyName>
      <d:ContactName>Maria Anders</d:ContactName>
      <d:ContactTitle>Sales Representative</d:ContactTitle>
      <d:Address>Obere Str. 57</d:Address>
      <d:City>Berlin</d:City>
      <d:Region m:null="true" />
      <d:PostalCode>12209</d:PostalCode>
      <d:Country>Germany</d:Country>
      <d:Phone>030-0074321</d:Phone>
      <d:Fax>030-0076545</d:Fax>
    </m:properties>
  </content>
</entry>
</feed>
// prepare the data
var source =
{
    datatype: "xml",
    datafields: [
        { name: 'CompanyName', map: 'm\\:properties>d\\:CompanyName' },
        { name: 'ContactName', map: 'm\\:properties>d\\:ContactName' },
        { name: 'ContactTitle', map: 'm\\:properties>d\\:ContactTitle' },
        { name: 'City', map: 'm\\:properties>d\\:City' },
        { name: 'PostalCode', map: 'm\\:properties>d\\:PostalCode' },
        { name: 'Country', map: 'm\\:properties>d\\:Country' }
    ],
    root: "entry",
    record: "content",
    id: 'm\\:properties>d\\:CustomerID',
    url: url
};

Data fields mapping with JSON Data

var data = [
    {
        "state": {
            "id": "x526",
            "city": {
                "name": "Beverly Hills",
                "id": 90210,
                "value": "Beverly Hills"
            }
        }
    }
];

var source = {
    datatype: 'json',
    localdata: data,
    datafields:
    [
        {
            name: 'cityName', map: 'state>city>name'
        }
    ]
};

var dataAdapter = new $.jqx.dataAdapter(source);

settings: A set of key/value pairs that configure the jqxDataAdapter plug-in. All settings are optional.
To perform data binding operation with the jqxDataAdapter plug-in, you need to call its dataBind method. When the data is loaded, all data records are stored in a records array.

Examples of using jqxDataAdapter:

Asynchronous Binding

The result of the above code is:

Binding to Local Array

The result of the above code is:

Dynamic Data Refresh

The result of the above code is:

Binding to JSON using PHP

Let's see how to get data in JSON format from a file called data.php.

data.php

<?php
$firstNames = array("Andrew", "Nancy", "Shelley", "Regina", "Yoshi", "Antoni", "Mayumi", "Ian","Peter", "Lars", "Petra", "Martin", "Sven", "Elio", "Beate", "Cheryl", "Michael", "Guylene");
$lastNames = array("Fuller", "Davolio", "Burke", "Murphy", "Nagase", "Saavedra", "Ohno", "Devling","Wilson", "Peterson", "Winkler", "Bein", "Petersen", "Rossi", "Vileid", "Saylor", "Bjorn", "Nodier");
$productNames = array("Black Tea", "Green Tea", "Caffe Espresso", "Doubleshot Espresso", "Caffe Latte", "White Chocolate Mocha", "Cramel Latte", "Caffe Americano", "Cappuccino", "Espresso Truffle", "Espressocon Panna", "Peppermint Mocha Twist", "Black Tea", "Green Tea", "Caffe Espresso", "Doubleshot Espresso", "Caffe Latte", "White Chocolate Mocha");
$priceValues = array("2.25", "1.5", "3.0", "3.3", "4.5", "3.6", "3.8", "2.5", "5.0","1.75","3.25","4.0", "2.25", "1.5", "3.0", "3.3", "4.5", "3.6");
$data = array();
$i=0;
while($i < count($productNames))
{
$row = array();
$productindex = $i;
$price = $priceValues[$productindex];
$quantity = rand(1, 10);
$row["firstname"] = $firstNames[$i];
$row["lastname"] = $lastNames[$i];
$row["productname"] = $productNames[$productindex];
$row["price"] = $price;
$row["quantity"] = $quantity;
$row["total"] = $price * $quantity;
$data[$i] = $row;
$i++;
}
echo "{\"data\":" .json_encode($data). "}";
?>

index.php

The result of the above code is:

Data Binding to Nested JSON

In order to use a nested JSON as a data source, you will have to do the following:

1. Add the sub-collection to the dataFields array and set its type to "array". In the code below, the sub-collection's name is children.
2. Add a hierarchy object as a member of the source object.
3. Add a member called root to the hierarchy object.
4. Set the root to the sub-collection name.
var employees = [
    {
        "EmployeeID": 2, "FirstName": "Andrew", "LastName": "Fuller", "Country": "USA", "Title": "Vice President, Sales", "HireDate": "1992-08-14 00:00:00", "BirthDate": "1952-02-19 00:00:00", "City": "Tacoma", "Address": "908 W. Capital Way", "expanded": "true",
        children: [
        { "EmployeeID": 8, "FirstName": "Laura", "LastName": "Callahan", "Country": "USA", "Title": "Inside Sales Coordinator", "HireDate": "1994-03-05 00:00:00", "BirthDate": "1958-01-09 00:00:00", "City": "Seattle", "Address": "4726 - 11th Ave. N.E." },
        { "EmployeeID": 1, "FirstName": "Nancy", "LastName": "Davolio", "Country": "USA", "Title": "Sales Representative", "HireDate": "1992-05-01 00:00:00", "BirthDate": "1948-12-08 00:00:00", "City": "Seattle", "Address": "507 - 20th Ave. E.Apt. 2A" },
        { "EmployeeID": 3, "FirstName": "Janet", "LastName": "Leverling", "Country": "USA", "Title": "Sales Representative", "HireDate": "1992-04-01 00:00:00", "BirthDate": "1963-08-30 00:00:00", "City": "Kirkland", "Address": "722 Moss Bay Blvd." },
        { "EmployeeID": 4, "FirstName": "Margaret", "LastName": "Peacock", "Country": "USA", "Title": "Sales Representative", "HireDate": "1993-05-03 00:00:00", "BirthDate": "1937-09-19 00:00:00", "City": "Redmond", "Address": "4110 Old Redmond Rd." },
        {
            "EmployeeID": 5, "FirstName": "Steven", "LastName": "Buchanan", "Country": "UK", "Title": "Sales Manager", "HireDate": "1993-10-17 00:00:00", "BirthDate": "1955-03-04 00:00:00", "City": "London", "Address": "14 Garrett Hill", "expanded": "true",
            children: [
                    { "EmployeeID": 6, "FirstName": "Michael", "LastName": "Suyama", "Country": "UK", "Title": "Sales Representative", "HireDate": "1993-10-17 00:00:00", "BirthDate": "1963-07-02 00:00:00", "City": "London", "Address": "Coventry House Miner Rd." },
                    { "EmployeeID": 7, "FirstName": "Robert", "LastName": "King", "Country": "UK", "Title": "Sales Representative", "HireDate": "1994-01-02 00:00:00", "BirthDate": "1960-05-29 00:00:00", "City": "London", "Address": "Edgeham Hollow Winchester Way" },
                    { "EmployeeID": 9, "FirstName": "Anne", "LastName": "Dodsworth", "Country": "UK", "Title": "Sales Representative", "HireDate": "1994-11-15 00:00:00", "BirthDate": "1966-01-27 00:00:00", "City": "London", "Address": "7 Houndstooth Rd." }
            ]
        }
        ]
    }
];

// prepare the data
var source =
{
    dataType: "json",
    dataFields: [
        { name: 'EmployeeID', type: 'number' },
        { name: 'FirstName', type: 'string' },
        { name: 'LastName', type: 'string' },
        { name: 'Country', type: 'string' },
        { name: 'City', type: 'string' },
        { name: 'Address', type: 'string' },
        { name: 'Title', type: 'string' },
        { name: 'HireDate', type: 'date' },
        { name: 'children', type: 'array' },
        { name: 'expanded', type: 'bool' },
        { name: 'BirthDate', type: 'date' }
    ],
    hierarchy:
    {
        root: 'children'
    },
    id: 'EmployeeID',
    localData: employees
};
var dataAdapter = new $.jqx.dataAdapter(source);

Data Binding to Nested XML

In order to use a nested XML as a data source, you will have to do the following:

1. Set the root, record and id members of the source object. For more information about these members, visit: jquery-data-adapter.htm.
2. Add a hierarchy object as a member of the source object.
3. Add root and record members to the hierarchy object to specify the nested sequence.

XML Data - employees.xml

<?xml version="1.0"?>
<Employees>
<Employee EmployeeID="2">
<LastName>Fuller</LastName>
<FirstName>Andrew</FirstName>
<Title>Vice President, Sales</Title>
<TitleOfCourtesy>Dr.</TitleOfCourtesy>
<BirthDate>1952-02-19</BirthDate>
<HireDate>1992-08-14</HireDate>
<Address>908 W. Capital Way</Address>
<City>Tacoma</City>
<Region>WA</Region>
<PostalCode>98401</PostalCode>
<Extension>3457</Extension>
<Notes>Andrew received his BTS commercial in 1974 and a Ph.D. in international marketing from the University of Dallas in 1981. He is fluent in French and Italian and reads German. He joined the company as a sales representative, was promoted to sales manager in January 1992 and to vice president of sales in March 1993. Andrew is a member of the Sales Management Roundtable, the Seattle Chamber of Commerce, and the Pacific Rim Importers Association.</Notes>
<Employees>
<Employee EmployeeID="8">
<LastName>Callahan</LastName>
<FirstName>Laura</FirstName>
<Title>Inside Sales Coordinator</Title>
<TitleOfCourtesy>Ms.</TitleOfCourtesy>
<BirthDate>1958-01-09</BirthDate>
<HireDate>1994-03-05</HireDate>
<Address>4726 - 11th Ave. N.E.</Address>
<City>Seattle</City>
<Region>WA</Region>
<PostalCode>98105</PostalCode>
<Extension>2344</Extension>
<Notes>Laura received a BA in psychology from the University of Washington. She has also completed a course in business French. She reads and writes French.</Notes>
</Employee>
<Employee EmployeeID="1">
<LastName>Davolio</LastName>
<FirstName>Nancy</FirstName>
<Title>Sales Representative</Title>
<TitleOfCourtesy>Ms.</TitleOfCourtesy>
<BirthDate>1948-12-08</BirthDate>
<HireDate>1992-05-01</HireDate>
<Address>
507 - 20th Ave. E.
Apt. 2A
</Address>
<City>Seattle</City>
<Region>WA</Region>
<PostalCode>98122</PostalCode>
<Extension>5467</Extension>
<Notes>Education includes a BA in psychology from Colorado State University in 1970. She also completed "The Art of the Cold Call." Nancy is a member of Toastmasters International.</Notes>
</Employee>
<Employee EmployeeID="5">
<LastName>Buchanan</LastName>
<FirstName>Steven</FirstName>
<Title>Sales Manager</Title>
<TitleOfCourtesy>Mr.</TitleOfCourtesy>
<BirthDate>1955-03-04</BirthDate>
<HireDate>1993-10-17</HireDate>
<Address>14 Garrett Hill</Address>
<City>London</City>
<Region/>
<PostalCode>SW1 8JR</PostalCode>
<Extension>3453</Extension>
<Notes>Steven Buchanan graduated from St. Andrews University, Scotland, with a BSC degree in 1976. Upon joining the company as a sales representative in 1992, he spent 6 months in an orientation program at the Seattle office and then returned to his permanent post in London. He was promoted to sales manager in March 1993. Mr. Buchanan has completed the courses "Successful Telemarketing" and "International Sales Management." He is fluent in French.</Notes>
<Employees>
<Employee EmployeeID="9">
<LastName>Dodsworth</LastName>
<FirstName>Anne</FirstName>
<Title>Sales Representative</Title>
<TitleOfCourtesy>Ms.</TitleOfCourtesy>
<BirthDate>1966-01-27</BirthDate>
<HireDate>1994-11-15</HireDate>
<Address>7 Houndstooth Rd.</Address>
<City>London</City>
<Region/>
<PostalCode>WG2 7LT</PostalCode>
<Extension>452</Extension>
<Notes>Anne has a BA degree in English from St. Lawrence College. She is fluent in French and German.</Notes>
</Employee>
<Employee EmployeeID="7">
<LastName>King</LastName>
<FirstName>Robert</FirstName>
<Title>Sales Representative</Title>
<TitleOfCourtesy>Mr.</TitleOfCourtesy>
<BirthDate>1960-05-29</BirthDate>
<HireDate>1994-01-02</HireDate>
<Address>
Edgeham Hollow
Winchester Way
</Address>
<City>London</City>
<Region/>
<PostalCode>RG1 9SP</PostalCode>
<Extension>465</Extension>
<Notes>Robert King served in the Peace Corps and traveled extensively before completing his degree in English at the University of Michigan in 1992, the year he joined the company. After completing a course entitled "Selling in Europe," he was transferred to the London office in March 1993.</Notes>
</Employee>
<Employee EmployeeID="6">
<LastName>Suyama</LastName>
<FirstName>Michael</FirstName>
<Title>Sales Representative</Title>
<TitleOfCourtesy>Mr.</TitleOfCourtesy>
<BirthDate>1963-07-02</BirthDate>
<HireDate>1993-10-17</HireDate>
<Address>
Coventry House
Miner Rd.
</Address>
<City>London</City>
<Region/>
<PostalCode>EC2 7JR</PostalCode>
<Extension>428</Extension>
<Notes>Michael is a graduate of Sussex University (MA, economics, 1983) and the University of California at Los Angeles (MBA, marketing, 1986). He has also taken the courses "Multi-Cultural Selling" and "Time Management for the Sales Professional." He is fluent in Japanese and can read and write French, Portuguese, and Spanish.</Notes>
</Employee>
</Employees>
</Employee>
<Employee EmployeeID="3">
<LastName>Leverling</LastName>
<FirstName>Janet</FirstName>
<Title>Sales Representative</Title>
<TitleOfCourtesy>Ms.</TitleOfCourtesy>
<BirthDate>1963-08-30</BirthDate>
<HireDate>1992-04-01</HireDate>
<Address>722 Moss Bay Blvd.</Address>
<City>Kirkland</City>
<Region>WA</Region>
<PostalCode>98033</PostalCode>
<Extension>3355</Extension>
<Notes>Janet has a BS degree in chemistry from Boston College (1984). She has also completed a certificate program in food retailing management. Janet was hired as a sales associate in 1991 and promoted to sales representative in February 1992.</Notes>
</Employee>
<Employee EmployeeID="4">
<LastName>Peacock</LastName>
<FirstName>Margaret</FirstName>
<Title>Sales Representative</Title>
<TitleOfCourtesy>Mrs.</TitleOfCourtesy>
<BirthDate>1937-09-19</BirthDate>
<HireDate>1993-05-03</HireDate>
<Address>4110 Old Redmond Rd.</Address>
<City>Redmond</City>
<Region>WA</Region>
<PostalCode>98052</PostalCode>
<Extension>5176</Extension>
<Notes>Margaret holds a BA in English literature from Concordia College (1958) and an MA from the American Institute of Culinary Arts (1966). She was assigned to the London office temporarily from July through November 1992.</Notes>
</Employee>
</Employees>
</Employee>
</Employees>
var source =
{
    dataType: "xml",
    dataFields: [
        { name: 'EmployeeID', type: 'number' },
        { name: 'ReportsTo', type: 'number' },
        { name: 'FirstName', type: 'string' },
        { name: 'LastName', type: 'string' },
        { name: 'City', type: 'string' },
        { name: 'Address', type: 'string' },
        { name: 'Title', type: 'string' },
        { name: 'HireDate', type: 'date' },
        { name: 'BirthDate', type: 'date' }
    ],
    hierarchy:
    {
        // defines the root and record of each hiearchy level.
        root: 'Employees',
        record: 'Employee'
    },
    id: 'EmployeeID',
    root: 'Employees',
    record: 'Employee',
    url: "employees.xml"
};

var dataAdapter = new $.jqx.dataAdapter(source);

Data Binding to Observable Array

var observableArray = new $.jqx.observableArray(array, function (changed) {
});
var source =
{
    localdata: observableArray,
    datatype: "obserableArray",
    datafields:
    [
        { name: 'firstname', type: 'string' },
        { name: 'lastname', type: 'string' },
        { name: 'productname', type: 'string' },
        { name: 'quantity', type: 'number' },
        { name: 'price', type: 'number' },
        { name: 'total', type: 'number' }
    ]
};

var dataAdapter = new $.jqx.dataAdapter(source);
Please visit: javascript-observable-array.htm for more information about observable arrays.

Methods and Properties