jQuery и jTemplates - как получить правильные значения? - PullRequest
0 голосов
/ 22 декабря 2011

У меня проблемы с построением правильного формата jTemplates - надеюсь на некоторую помощь. Вот что у меня есть: страница ASP.NET с WebMethod. Этот WebMethod возвращает данные в jQuery. Затем данные должны обрабатываться jTemplates, но я не уверен в формате для jTemplate.

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Text;
using Microsoft.Practices.EnterpriseLibrary.Data;
using System.Data.Common;
using System.Web.Services;
using System.Linq;
using System.Web.Script.Services;

public partial class jpaging : System.Web.UI.Page
{
    [WebMethod]
    public static IEnumerable PagingData(int Page, int PageSize)
    {
        // talk to database and return datatable
        Database db = DatabaseFactory.CreateDatabase();
        using (DbCommand cmd = db.GetStoredProcCommand("Paging"))
        {
            db.AddParameter(cmd, "@Page", DbType.Int32, 4, ParameterDirection.Input, true, 10, 0, null, DataRowVersion.Default, Page);
            db.AddParameter(cmd, "@PageSize", DbType.Int32, 4, ParameterDirection.Input, true, 10, 0, null, DataRowVersion.Default, PageSize);
            using (DataTable dt = (db.ExecuteDataSet(cmd)).Tables[0])
            {
                var t = from data in dt.AsEnumerable() select data.ItemArray;
                return t;
            }
        }
    }
}

Данные, возвращаемые из «return t», имеют следующий формат.

{"d":[
 [1,1,"First 1","Last 1",301],
 [2,2,"First 2","Last 2",301],
 [3,3,"First 3","Last 3",301],
 [4,4,"First 4","Last 4",301],
 [5,5,"First 5","Last 5",301],
 [6,6,"First 6","Last 6",301],
 [7,7,"First 7","Last 7",301],
 [8,8,"First 8","Last 8",301],
 [9,9,"First 9","Last 9",301],
 [10,10,"First 10","Last 10",301]
]}

Я использую следующий код для анализа данных в jTemplates:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="jpaging.aspx.cs" Inherits="jpaging" EnableViewState="false" %>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
<script src="paging/jquery-jtemplates.js" type="text/javascript"></script>
<script type="text/javascript">

var currentPage = 1;
var pageSize = 10;

$(document).ready(function () {
   loadData(1); 
});

function loadData(page) {
   currentPage = page;
   $.ajax({
       type: "POST",
       url: "jpaging.aspx/PagingData",
       data: "{'Page':'" + page + "', 'PageSize':'" + pageSize + "'}",
       contentType: "application/json; charset=utf-8",
       dataType: "json",
       success: function (msg) {
           doTemplating(msg); 
           // ....
       }
   });
}

function doTemplating(msg) {
    $('#cont').setTemplateURL('/mytemplate.htm', null, { filter_data: false });
    $('#cont').processTemplate(msg);
}

</script>
</head>
<body>

   <table id="rsstable" cellspacing="0">
    <thead>
       <tr><th>ID</th><th>First</th><th>Last</th></tr>
    </thead>
    <tbody id="cont"></tbody>
   </table>

</body>
</html>

Я не уверен, как mytemplate.htm должен быть построен:

{#foreach $T.d as post}
<tr>      
  <td> <-- what to write here for column1? --> </td>
  <td> <-- what to write here for column2? --> </td>
  <td> <-- what to write here for column3? --> </td>
</tr>
{#/for}

Я пробовал что-то вроде {$ T.post [0]}, но это не работает.

В качестве примечания я хочу избегать возврата чего-то подобного из WebMethod:

    var feeds = from feed in dt.AsEnumerable()
            select new
            {
                EmployeeID = feed["EmployeeID"],
                FirstName = feed["FirstName"],
                LastName = feed["LastName"],
                Total = feed["TotalRows"]
            };
     return feeds;

Если бы это было так, я бы просто сделал что-то вроде этого:

{#foreach $T.d as post}
<tr>
  <td>{$T.post.EmployeeID}</td>
  <td>{$T.post.FirstName}</td>
  <td>{$T.post.LastName}</td>
</tr>
{#/for}

... но я хочу избежать этого, чтобы сделать шаблон более универсальным / удобным для других возвращаемых данных.

Есть предложения? : -)

1 Ответ

0 голосов
/ 22 декабря 2011

Я не уверен, где JSONP вписывается в то, что вы делаете?JSONP поддерживает только действие GET HTTP, т.е. не POST.См. Здесь: Публикация данных на JsonP

Вы можете создавать кросс-доменные сообщения с помощью CORS, см. Здесь: http://enable -cors.org /

Я бы порекомендовал либо использовать firebug и использовать точку отладки для проверки возвращаемой переменной, либо использовать этот стиль ведения журнала: Как я могу отобразить объект JavaScript? .Это позволит вам увидеть, что возвращается.После этого вы можете сузить свою проблему до того, чтобы делать это с JTemplate.В качестве альтернативы вы можете попробовать встроенный в jquery шаблон под названием jquery.tmpl http://api.jquery.com/jquery.tmpl/

...