2014-02-18 5 views
1

У меня есть KendoUI DataSource на моей странице, что чтение данных (в формате JSON) из метода, мой сценарий:Как добавить новую запись в KendoUI DataSource компонент

<script id="template" type="text/x-kendo-template"> 
      <tr> 
       <td>#= ID #</td> 
       <td>#= TITLE #</td> 
       <td>#= DESC#</td> 

      </tr> 
     </script> 

      <script> 
       $(document).ready(function() { 
        // create a template using the above definition 
        var template = kendo.template($("#template").html()); 

        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() { // subscribe to the CHANGE event of the data source 
          $("#movies tbody").html(kendo.render(template, this.view())); // populate the table 
         } 
        }); 

        dataSource.read(); 
       }); 
     </script> 

и я хочу другой сценарию setInterval, который вызывает метод, который дает нам новые данные, которые недавно были добавлены в мою базу данных, и показать их в моем источнике данных KendoUI.

я пробовал раньше, как это:

<script> 
    $(document).ready(function() { 
     $("#go").click(function() { 
      setInterval(function() { 
       var dataSource= new kendo.data.DataSource({ 
        data=function() 
       { 

        $.ajax({ 
         type: "POST", 
         url: "WebForm1.aspx/GetNewNoti", 
         data: '{}', 
         contentType: "application/json; charset=utf-8", 
         dataType: "json", 
         success: function(response) { 

          for (var i = 0; i < response.d.length; i++) { 
           dataSource.add({ 'ID': response.d[i].ID, 'TITLE': response.d[i].TITLE, 'DESC': response.d[i].DESC }); 
          }; 
         }, 
        }); 

        }, 
      }); 

      }, 8000); 
     }); 
    }); 

</script> 

кто-нибудь может мне помочь?

EDIT: я редактировать seccond скрипт так:

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

test2:

function test2() { 

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

         }); 
        dataSource2.read(); 

        } 

и мы имеем р(), как это:

var p = function test() { 
      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; 

        }; 

этим методом, я нужен способ добавить dataSource2 в datasource (в первом скрипте), есть ли какой-нибудь способ?

+0

почему вы не обновить сетку снова и снова, так что любые данные, присутствующие в базе данных, будут показаны в сетке. –

+0

Представьте, что это как Уведомление .. Я хочу сделать это автоматически .. Я пытаюсь, но я не мог этого сделать .. У вас есть идея ??? – pejman

+0

В случае уведомления получить счетчик существующего источника данных и нового источника данных, если позднее будет больше существующего, тогда вы можете вывести уведомление. –

ответ

0

Создайте функцию, чтобы обновить сетку, как показано ниже и назовите его после создания сетки:

function RefreshDatasource() { 
     setInterval(function() { 
      //Get the Existing datasource item's count  
      var existingCount=YourDataSource.view().length; 

      // Below code refreshes the grid 
      YourDataSource.read(); 

      //Get the new datasource item's count    
      var newCount=YourDataSource.view().length; 
     if(newCount>existingCount) 
     { 
      //Show your message through the alert box; 
     } 
     }, refreshInterval); 
    } 

Таким образом, вы можете получение идеальных требуемой функциональности

+0

Спасибо за ваш ответ, но это не сетка, его компонент DataSource – pejman

+0

Проверьте измененный ответ –

Смежные вопросы