0

私はJqueryモバイルを初めて使用します。db から ListView を設定する必要があります。このフォーラムのリンクをチェックしていました:

http://www.isgoodstuff.com/2012/06/10/html5-custom-listviews-with-jquerymobile/

同じことをしたいのですが、データベースからすべてのデータ(画像と対応するデータ)を取得したいです。リモート データソースから Listview にデータを入力できました。でもそれは単純なことで、何のイメージもありませんでした。以下がそのコードです。しかし、ここでそのアプローチを適用して、リストビューとリモート データ ソースからのデータ バインディングをよりカスタマイズする方法がわかりません。

<div data-role="content">
   <ul data-role="listview" id="contentListView" data-inset="true" data-filter="true"></ul>
   </div>

   <script type="text/javascript" charset="utf-8">
       $(function(){
           var serviceUrl='http://mydatasource:81/Service.asmx/show';
               $.ajax({
                   url:serviceUrl,
                   success:function(xml){
                       setTimeout(function(){
                           feedItem = '';
                           $(xml).find( "newset" ).each(function(){
                               var item = $(this),
                               title =  item.find('EmployeeID').text(),
                               link =  item.find('FirstName').text()
                               feedItem = feedItem + '<li class="test"><a class="test2" href="#">';
                               feedItem = feedItem + link;
                               feedItem = feedItem + '</a></li>';
                           });
                           $('#contentListView').append(feedItem);
                       },100);
                   },
                   error:function(){
               },
               dataType:"xml"
         });
     });
 </script>

ありがとう。バビア。


返信ありがとうございます..本当に感謝しています..しかし、同じコードを試してみると、「ネットワークエラーが発生しました!」にリダイレクトされます。アラート。私は何かが欠けていますか?ところで、ビジュアルスタジオでこれを試しました。これが私の完全なコードです。

<!DOCTYPE html>
<html>
<head>
    <title>jQM Complex Demo</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.css" />
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.6.4.min.js"></script>
    <script type="text/javascript" src="http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.js"></script>
    <style type="text/css">
        li span
        {
            font-weight: normal;
        }
    </style>
</head>
<body>
    <div data-role="page" id="index">
        <div data-role="header">
            <h1>
                XML Parsing demo</h1>
        </div>
        <div data-role="content">
            <ul data-role="listview" data-inset="true" id="cars-data">
            </ul>
        </div>
    </div>
    <div data-role="page" id="cars">
        <div data-role="header">
            <a data-role="button" data-transition="none" data-theme="a" href="#index">Back</a>
            <h1>
            </h1>
        </div>
        <div data-role="content">
            <ul data-role="listview" data-inset="true" id="car-data">
            </ul>
            <img src="" width="100%" style="height: auto;" id="car-img">
        </div>
    </div>
    <script type="text/javascript" charset="utf-8">
        $('#index').live('pagebeforeshow', function (e, data) {
            $('#cars-data').empty();
            $.ajax({
                type: "POST",
                url: "/echo/xml/",
                dataType: "xml",
                data: {
                    xml: "<cars><car><name>TOYOTA</name><country>JAPAN</country><pic>http://1call.ms/Websites/schwartz2012/images/toyota-rav4.jpg</pic><description>Toyota has announced that it will recall a total of 778,000 units that may have been manufactured with improperly-tightened nuts on the rear suspension.</description></car></cars>"
                },
                success: function (xml) {
                    ajax.parseXML(xml);
                },
                error: function (request, error) {
                    alert('Network error has occurred!');
                }
            });
        });

        $("#cars").live('pagebeforeshow', function () {
            $("#cars div[data-role='header'] h1").html(carObject.carName);
            $('#car-data').empty();
            $('#car-data').append('<li>Car Type:<span> ' + carObject.carName + '</span></li>');
            $('#car-data').append('<li>Car Country:<span> ' + carObject.carCountry + '</span></li>');
            $('#car-data').append('<li>Car Description:<span> ' + carObject.description + '</span></li>');
            $('#car-data').listview('refresh');
            $('#car-img').attr('src', carObject.img)
        });

        var ajax = {
            parseXML: function (result) {
                $(result).find("car").each(function () {
                    carObject.carName = $(this).find('name').text();
                    carObject.carCountry = $(this).find('country').text();
                    carObject.img = $(this).find('pic').text();
                    carObject.description = $(this).find('description').text();

                    $('#cars-data').append('<li><a href="#cars"><img src="' + carObject.img + '" title="sample" height="100%" width="100%"/><h3>Car type:<span> ' + carObject.carName + '</span></h3><p>' + carObject.description + '</p></a></li>');
                });
                $('#cars-data').listview('refresh');
            }
        }

        var carObject = {
            carName: '',
            carCountry: '',
            img: '',
            description: ''
        }
    </script>
</body>
</html>

ありがとう

4

2 に答える 2

1

私の例を見てください。他の人のために作成しましたが、あなたの場合でも使用できます: http://jsfiddle.net/Gajotres/AzXdT/

私のデータソースは xml です。残念ながらリモート ドメインから xml を取得することはできないため、jsFiddle には $.ajax xml フェッチのモックアップがありますが、この例では、必要なことを行う方法を示します。

カスタム リストビューを作成するには、次のテンプレートが必要です。

<ul data-role="listview">
    <li><a href="index.html">
        <img src="images/sample.jpg" title="sample"/>
        <h3>Sample image</h3>
        <p>Sample</p>
    </a></li>
    <li><a href="index.html">
        <img src="images/sample.jpg" title="sample"/>
        <h3>Sample image</h3>
        <p>Sample 2</p>
     </a></li>
</ul>

私の例では、この種のリストビュー (私の場合は xml からですが、メソッドは json と同じです) を作成し、このデータを新しいページに表示する方法を示します。

于 2012-12-19T09:28:56.027 に答える
1

私はいくつかの変更を加えましたが、うまくいきました。どうもありがとうございました。ここにコードを貼り付けます。リモートデータソースを使用している人に役立つことを願っています.

<!DOCTYPE html>
<html>
   <head>
     <style type="text/css">
        li span
         {
            font-weight: normal;
         }
     </style>
   <title> Sample App using jQuery Mobile</title>
      <meta name="viewport" content="width=device-width, initial-scale=1"> 
      <link rel="stylesheet" href="http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.css" />
      <script type="text/javascript" src="http://code.jquery.com/jquery-1.6.4.min.js"></script>
      <script type="text/javascript" src="http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.js"></script>
   <head>
   <body>
      <div data-role="page" id="car">
         <div data-role="header" data-postion="fixed">
            <h1> Cars</h1>
            <h1 id="blogheader">Loading...</h1>
         </div>
         <div data-role="content">
            <ul data-role="listview" data-inset="true" id="contentListView">
            </ul>
         </div>
         <div data-role="footer" data-position="fixed">
             <h1> Footer </h1>
         </div>
     </div>

 <script type="text/javascript" charset="utf-8">
    $(function(){
       var serviceUrl='http://mysite:81/Service.asmx/ShowListViewData';
       $.ajax({
         url:serviceUrl,
         success:function(xml){
         setTimeout(
         function(){
            $(xml).find( "newset" ).each(function(){
                carName  = $(this).find('ItemName').text();
                img  = $(this).find('ImageUrl').text();
                description  = $(this).find('ItemDescription').text();
                $('#contentListView').append('<li><a href="#"><img src="' + img + '" title="sample" height="100%" width="100%"/><h3>Car type:<span> '+carName+'</span></h3><p>' + description + '</p></a></li>');
            });
        $('#contentListView').listview('refresh');
       }
       ,100);
      },
       error:function(){
      },
       dataType:"xml"
   });
 });
 </script>
 </body>
</html>

これが私のWebサービスです:-

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Script.Services;
using System.Web.Services;
using System.Data;
using System.Data.SqlClient;
using System.Web.Script.Serialization;
using System.IO;
using System.Web.Configuration;

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
[System.Web.Script.Services.ScriptService]

public class Service : System.Web.Services.WebService
{
    [WebMethod()]
    public void ShowListViewData()
    {
        string connection = WebConfigurationManager.ConnectionStrings["SampleConnectionString"].ConnectionString;
        SqlConnection conn = new SqlConnection(connection);
        SqlCommand SqlCommand = new SqlCommand();
        string s = "SELECT ImageUrl,ItemName,ItemDescription FROM ListViewSource";
        SqlCommand.CommandText = s;
        SqlCommand.Connection = conn;
        SqlDataAdapter da = new SqlDataAdapter(SqlCommand);
        DataSet ds = new DataSet();
        da.Fill(ds, "newset");
        StringWriter sw = new StringWriter();
        ds.WriteXml(sw, XmlWriteMode.IgnoreSchema);
        Context.Response.Clear();
        Context.Response.ContentType = "application/xml";
        Context.Response.Flush();
        Context.Response.Write(sw.ToString());
    }
}

ありがとう。

于 2012-12-20T06:40:46.000 に答える