2014-02-19 41 views
0

我写了两个函数,假设其中一个函数让我们列出所有通知,其中一个函数获得新通知,我写了一个脚本调用第一个方法并获取Json格式所有通知的列表,然后写入另一个脚本每8秒调用一次第二个方法,并以Json格式获取新的通知。我在KendoUI数据源中显示这些notifacations。所以我只有一个KendoUI数据源组件的数据源,我想在一个数据源中添加两个数据源,有没有办法做到这一点?KendoUI数据源组件

编辑:这是我的代码

<script id="template" type="text/x-kendo-template"> 

      <tr> 

      <td>#= ID #</td> 
      <td>#= TITLE #</td> 
      <td>#= DESC#</td> 

      </tr> 
    </script> 

我这把我们所有通知的列表的第一个脚本:

 var datas = function() { 

         var objects = []; 
         $.ajax({ 
          type: "POST", 
          url: "./WebForm1.aspx/GetNoti", 
          data: {}, 
          async: false, 
          contentType: "application/json; charset=utf-8", 
          dataType: "json", 
          success: 
           function (response) { 

            for (var i = 0; i < response.d.length; i++) { 

             objects.push({ 'ID': response.d[i].ID, 'TITLE': response.d[i].TITLE, 'DESC': response.d[i].DESC }); 

            } 
           }, 

         }); 
         return objects; 
        }; 




        var dataSource = new kendo.data.DataSource({ 
         data: datas(), 
         change: function() { 
          $("#movies tbody").html(kendo.render(template, this.view())); 
         } 
        }); 

        dataSource.read(); 

,这是我seccond脚本调​​用方法,让我们的新通知每8秒:

 $("#go").click(function() { 
         setInterval(
          function() { test2();}, 8000); 
        }); 

     var p = function() { 
         var objects = []; 
         $.ajax({ 
          type: "POST", 
          url: "./WebForm1.aspx/GetUnCheckNotification", 
          data: {}, 
          async: false, 
          contentType: "application/json; charset=utf-8", 
          dataType: "json", 
          success: 
           function (response) { 

            for (var i = 0; i < response.d.length; i++) { 

             objects.push({ 'ID': response.d[i].ID, 'TITLE': response.d[i].TITLE, 'DESC': response.d[i].DESC }); 

            } 
           }, 

         }); 
         return objects; 

        }; 

      function test2() { 

         var dataSource2 = new kendo.data.DataSource({ 
          data: p(), 
          change: function() { 
           $("#movies tbody").html(kendo.render(template, this.view())); 
          } 

         }); 
         dataSource2.read(); 

        } 

现在我想要一些这样的事情:

展现dataSource =展现dataSource + dataSource2

dataSource.read();

反正有吗?

+0

您能否提供一些代码以便我们检查您的dataSource? – Gerry

+0

我编辑了我的问题 – pejman

回答

1

JSON格式cab是一个嵌套结构。定义一个视图模型,然后使用它。

public class Report 
{ 
    public int Id {set; get;} 
    public string Title {set; get;} 
    public string Desc {set; get;} 
} 

public class MyReportViewModel 
{ 
    public List<Report> NewNotifications {set;get;} 
    public List<Report> AllNotifications {set;get;} 
} 
  • 然后序列化此使用new MyReportViewModel { ... }Json.NET库(服务器端)。
  • 在客户端,您可以使用返回的JSON格式as usual
+0

你是什么意思是我不需要两个脚本之一的AllNotifications和另一个NewNotifications?我的方法呢?你能解释一下吗? – pejman

+0

是的,您可以将它们组合在一起作为视图模型+为了向用户表明来自服务器的新更改,最好使用'SignalR'而不是每8秒查询一次服务器。对于这些类型的任务,SignalR更有效率。 – VahidN

+0

谢谢,我混淆技巧:关于我的方法我写了两个方法与StoredProcedure其中一个给予使用所有通知,另一个是新的通知,其中条件uncheck = true,我写webmethod方法,我应该改变这些方法和SP是否合适? – pejman

0

从来没有尝试过这样的事情。但是当我在寻找你的答案时,我在Telerik Forums上找到了这个链接。

Two Data Sources, One Grid

这可能帮助! :)

+0

感谢您的回答..如果它不是一个好方法..请问你能给我一个更好的笏? – pejman

+0

这不是一个网格。它是一个DataSource组件 – pejman