2013-06-27 3 views
0

У меня есть сетка kendo ui, на событие изменения строки Я беру идентификатор строки и передаю ее другой функции, которая загружает другие сетки. Я попытался упростить операцию, чтобы выяснить, как это сделать.kendo ui grid добавить запись более одного раза

HTML код

<input type="button" id="load-first" value="Load 108" />  
<input type="button" id="load-second" value="Load 92" /> 

Javascript

$("#load-first").click(function(){ 
    loadEmailGrid(108); 
}); 
$("#load-second").click(function(){ 
    loadEmailGrid(92); 
}); 

    function loadEmailGrid(salesRepsId) { 
     dataSource = new kendo.data.DataSource({ 
      transport: { 
       read: { 
        url: "operations/get_emails_sales_reps.php?salesRepsId=" + salesRepsId, 
        type: "GET" 
       }, 
       update: { 
        url: "operations/edit_email.php?salesRepsId=" + salesRepsId, 
        type: "POST", 
        complete: function (e) { 
         $("#email-grid").data("kendoGrid").dataSource.read(); 
        } 
       }, 
       destroy: { 
        url: "operations/delete_email.php", 
        type: "POST", 
        complete: function (e) { 
         $("#email-grid").data("kendoGrid").dataSource.read(); 
        } 
       }, 
       create: { 
        url: "operations/add_email.php?salesRepsId=" + salesRepsId, 
        type: "POST", 
        complete: function (e) { 
         $("#email-grid").data("kendoGrid").dataSource.read(); 
        } 
       }, 
      }, 
      schema: { 
       data: "data", 
       total: "data.length", //total amount of records 
       model: { 
        id: "EmailId", 
        fields: { 
         EmailType: { 
          defaultValue: { 
           EmailTypeId: 2, 
           EmailTypeName: "Home" 
          } 
         }, 
         EmailText: { 
          type: "string" 
         }, 
         IsMainEmail: { 
          type: "boolean" 
         }, 
        } 
       } 

      }, 
      pageSize: 5, 
     }); 
     //dataSource.sync(); 
     $("#email-grid").kendoGrid({ 
      dataSource: dataSource, 
      height: 250, 
      filterable: true, 
      sortable: true, 
      pageable: true, 
      reorderable: false, 
      groupable: false, 
      batch: true, 
      navigatable: true, 
      toolbar: ["create", "save", "cancel"], 
      editable: true, 
      columns: [{ 
       field: "EmailType", 
       title: "Type", 
       editor: EmailTypeDropDownEditor, 
       template: "#=EmailType.EmailTypeName#", 
       filterable: { 
        extra: false, 
        field: "EmailType.EmailTypeName", 
        operators: { 
         string: { 
          startswith: "Starts with", 
          eq: "Is equal to", 
          neq: "Is not equal to" 
         } 
        } 
       } 
      }, { 
       field: "EmailText", 
       title: "Email", 

      }, { 
       field: "IsMainEmail", 
       title: "Main?", 
       width: 65, 
       template: function (e) { 
        if (e.IsMainEmail == true) { 
         return '<img align="center" src ="images/check-icon.png" />'; 
        } else { 
         return ''; 
        } 
       } 
       // hidden: true 

      }, { 
       command: "destroy", 
       title: "&nbsp;", 
       width: 90 
      }, 

      ] 
     }); 
    } 

пример обратного add_email.php

[{ "EMAILID": 200}]

если Я загружаю g избавиться от одного идентификатора, например, нажмите кнопку «Нажать 108». Операция добавления работает отлично. Но когда я нажимаю и смешиваю между двумя кнопками. т.е. загружать сетку с разными идентификаторами. Функция добавления, называемая много раз одной с предыдущим идентификатором, а другая - с идентификатором кнопки. больше клика между кнопками, вызывается функция add add.

Это link, что указывает на проблему.

Пожалуйста, как я могу это исправить? Я пробовал много вещей без везения

ответ

2

Вы используете глобальные переменные, поэтому вы смешиваете свои источники данных.

Изменить

dataSource = new kendo.data.DataSource({... 

в

var dataSource = new kendo.data.DataSource({... 

и повторите попытку.

EDIT:

попробовать это, как ваш код сценария.

http://jsfiddle.net/blackjim/9LHW5

главное, что вы должны сделать, это разделить инициализацию сетки, с изменением параметров транспорта.

, например:

function loadDatasourceWithId(salesRepsId){ 
    var dataSourceOptions = dataSource.options; // find somehow the dataSource options 
    dataSourceOptions.transport.read.url = "operations/get_emails_sales_reps.php?salesRepsId="+salesRepsId; 
    dataSourceOptions.transport.update.url = "operations/edit_email.php?salesRepsId="+salesRepsId; 
    dataSourceOptions.transport.create.url = "operations/add_email.php?salesRepsId="+salesRepsId 

    datasource.read(); // read again to get new values to your dataSource 
} 
+0

это не работает :( – Kamal

+0

пожалуйста, проверьте ссылку выше, может быть, вы можете понять что-то – Kamal

+0

я посмотрю, что проблема именно Каждый щелчок кнопки, кажется, заменить.? старый источник данных. Можете ли вы рассказать мне, как воспроизвести проблему? – AntouanK