2013-05-21 4 views
6

मैंने एक पहेली को एक साथ रखा है जो दर्शाता है कि केंडोयू 2013.1.319 में, ग्रिड में एक रिकॉर्ड संपादित करते समय और संपादन संवाद पर अपडेट बटन दबाएं, यह वास्तव में अपडेट ईवेंट के बजाय ट्रांसपोर्ट बिल्ड इवेंट बढ़ाता है, और यह प्रत्येक रिकॉर्ड के लिए इसे एक बार उठाता है।KendoUI ग्रिड ट्रांसपोर्ट क्यों ईवेंट कई बार उठाया जाता है, और यहां तक ​​कि जब कार्रवाई अद्यतन होती है?

निम्न पहेली खोलें और ग्रिड में पहले रिकॉर्ड पर संपादन बटन दबाएं, और उसके बाद संपादन संवाद पर अद्यतन बटन दबाएं, और कंसोल विंडो में एक नज़र डालें और आप देखेंगे कि मैंने उठाए गए ईवेंट को लॉग किया है और रिकॉर्ड आईडी जो घटना को पारित किया गया था।

http://jsfiddle.net/codeowl/fakDC/

हो रहा क्यों है, और मैं इसे कैसे ठीक करूं?

सादर,

स्कॉट

कोड StackOverflow खुश रखने के लिए:

<div id="TestGrid"></div> 

var _Data = [{ "SL_TestData_ID": "1", "SL_TestData_Number": "1", "SL_TestData_String": "Test", "SL_TestData_Date": "1971-12-19", "SL_TestData_DateTime": "1971-12-19 12:00:00", "SL_TestData_Time": "00:30:00", "SL_TestData_Boolean": "1" }, { "SL_TestData_ID": "2", "SL_TestData_Number": "22", "SL_TestData_String": "Test 2", "SL_TestData_Date": "2013-05-01", "SL_TestData_DateTime": "2013-05-01 03:05:22", "SL_TestData_Time": null, "SL_TestData_Boolean": "1" }, { "SL_TestData_ID": "3", "SL_TestData_Number": "55", "SL_TestData_String": "Test 3", "SL_TestData_Date": "2013-05-02", "SL_TestData_DateTime": "2013-05-02 05:33:45", "SL_TestData_Time": null, "SL_TestData_Boolean": "0" }, { "SL_TestData_ID": "10", "SL_TestData_Number": "1", "SL_TestData_String": "Test12", "SL_TestData_Date": "1971-12-19", "SL_TestData_DateTime": "1971-12-19 12:00:00", "SL_TestData_Time": "00:30:00", "SL_TestData_Boolean": "1" }]; 

var _kendoDataSource = new kendo.data.DataSource({ 
    transport: { 
     read: function (options) { 
      console.log('Transport READ Event Raised'); 
      options.success(_Data); 
     }, 
     create: function (options) { 
      console.log('Transport CREATE Event Raised - Record ID: ' + options.data.SL_TestData_ID); 
      _Data.push(options.data); 
      options.success(options.data); 
     }, 
     update: function (options) { 
      console.log('Transport UPDATE Event Raised - Record ID: ' + options.data.SL_TestData_ID); 
      var objRecord = $.grep(_Data, function (e) { return e.SL_TestData_ID == options.data.SL_TestData_ID; }); 
      _Data[_Data.indexOf(objRecord)] = options.data; 
      options.success(options.data); 
     }, 
     destroy: function (options) { 
      console.log('Transport DESTROY Event Raised'); 
      _Data.splice(_Data.indexOf(options.data), 1); 
      options.success(options.data); 
     } 
    }, 
    serverPaging: true, 
    serverFiltering: true, 
    serverSorting: true, 
    sortable: { 
     mode: 'multiple', 
     allowUnsort: true 
    }, 
    pageable: { 
     buttonCount: 5 
    }, 
    schema: { 
     model: { 
      id: "Users_ID", 
      fields: { 
       SL_TestData_ID: { editable: false, nullable: false, defaultValue: 0 }, 
       SL_TestData_Number: { type: "int", validation: { required: true, defaultValue: 0 } }, 
       SL_TestData_String: { type: "string", validation: { required: true } }, 
       SL_TestData_Date: { type: "date", validation: { required: true } }, 
       SL_TestData_DateTime: { type: "date", validation: { required: true } }, 
       SL_TestData_Time: { type: "date", validation: { required: true } }, 
       SL_TestData_Boolean: { type: "bool", validation: { required: true, defaultValue: false } } 
      } 
     } 
    }, 
    error: function (a) { 
     $('#TestGrid').data("kendoGrid").cancelChanges(); 
    } 
}); 

function dateTimeEditor(container, options) { 
    $('<input data-text-field="' + options.field + '" data-value-field="' + options.field + '" data-bind="value:' + options.field + '" data-format="' + options.format + '"/>') 
    .appendTo(container) 
    .kendoDateTimePicker({}); 
} 

function timeEditor(container, options) { 
    $('<input data-text-field="' + options.field + '" data-value-field="' + options.field + '" data-bind="value:' + options.field + '" data-format="' + options.format + '"/>') 
    .appendTo(container) 
    .kendoTimePicker({}); 
} 

// Initialize Grid 
$("#TestGrid").kendoGrid({ 
    columns: [ 
     { field: "SL_TestData_ID", title: "ID" }, 
     { field: "SL_TestData_Number", title: "Number" }, 
     { field: "SL_TestData_String", title: "String" }, 
     { 
      field: "SL_TestData_Date", 
      title: "Date", 
      format: "{0:MM/dd/yyyy}" 
     }, 
     { 
      field: "SL_TestData_DateTime", 
      title: "Date Time", 
      format: "{0:MM/dd/yyyy HH:mm tt}", 
      editor: dateTimeEditor, 
      filterable: { 
       ui: "datetimepicker" 
      } 
     }, 
     { 
      field: "SL_TestData_Time", 
      title: "Time", 
      format: "{0:HH:mm tt}", 
      editor: timeEditor, 
      filterable: { 
       ui: "timepicker" 
      } 
     }, 
     { field: "SL_TestData_Boolean", title: "Boolean" }, 
     { command: ["edit", "destroy"], title: "&nbsp;", width: "180px" } 
    ], 
    toolbar: ['create'], 
    editable: 'popup', 
    sortable: true, 
    filterable: true, 
    dataSource: _kendoDataSource 
}); 

उत्तर

9

समस्या ऐसी कोई क्षेत्र नहीं है कि model में आप Users_IDid के रूप में परिभाषित लेकिन है केंडो यूआई के लिए बहुत यह अनिर्धारित है जिसका अर्थ है कि यह नया है।

id जब भी आपके पास editable है तो ग्रिड अनिवार्य है। केंडो यूआई इसका उपयोग करता है (dirty के साथ संयोजन में) यह जानने के लिए कि क्या उसे सर्वर पर भेजा जाना है या नहीं।

यदि आप idSL_TestData_ID के रूप में परिभाषित करते हैं (सुनिश्चित नहीं हैं कि वे समान हैं और आप इसे कर सकते हैं) तो आप देखते हैं कि यह केवल उस सर्वर को भेजता है जो वास्तव में संशोधित या निर्मित डेटा को भेजता है।

आपकी पहेली यहां संशोधित http://jsfiddle.net/fakDC/3/

+0

धन्यवाद साथी। बहुत सराहना की। मेरी गलती, मैं स्कीमा में आईडी को धुंधला करता हूं। एक बार फिर धन्यवाद। – user2109254

+1

मुझे लगता है कि इस महत्वपूर्ण जानकारी को या तो दस्तावेज से छुपा या गायब था। यह अब इतना स्पष्ट प्रतीत होता है। धन्यवाद – gitsitgo

संबंधित मुद्दे