2014-04-02 66 views
0

我已經與行選擇啓用和一個命令按鈕(click事件)網格劍道UI格 - 與命令按鈕的點擊行選擇

「一般」當我按下按鈕,按鈕,相應的行選中,然後觸發按鈕的單擊事件 這是正確的行爲,我想要! 但「某個時候」該行的選擇並不accour,只是按鈕的單擊事件被觸發

我無法重現上撥弄所有的代碼,但我會給你這個細節在這裏下面

在第一i已經認爲這是我想「定時問題」 認爲「某個」的選擇需要更多的時間爲:[劍術使用的版本劍道UI完成v2013.1.319]

var Master = {}; 
Master._height = null; 
Master._resSolDataSource = null; 
Master._followUpDataSource = null; 
Master._filter = {}; 
Master.SelectedDocument = {}; 
Master.followUpWindow = null; 

Master.init = function() { 

    Master._resSolDataSource = new kendo.data.DataSource({ 
     ......... 
     .... 
    }); 


    //Inizialize the adminGrid 
    $("#adminGrid").kendoGrid({ 
     autoBind: false, 
     dataSource: Master._resSolDataSource, 
     selectable: true, 
     pageable: true, 
     change: Master.onRowChange, 
     heigt: 300, 
     columns: [{ 
      field: "Id", 
      hidden: true 
     }, { 
      field: "Piva", 
      title: "Partiva IVA" 
     }, { 
      field: "RagioneSociale", 
      title: "Ragione Sociale" 
     }, { 
      field: "Data", 
      format: "{0:dd/MM/yyyy}" 
     }, { 
      field: "Diniego", 
      title: "Diniego" 
     }, { 
      field: "AnnoRiferimento", 
      title: "Anno di riferimento" 
     }, { 
      field: "MeseRiferimento", 
      title: "Mese di riferimento" 
     }, { 
      field: "Stato" 
     }, { 
      command: [ 
       { 
        name: "download", 
        click: Master.download 
       } 
      ], 
      title: " ", 
      width: 180 
     }] 
    }); 

    //double click has the same behaviour of the button click 
    $("#adminGrid").delegate("tbody>tr[role=row]", "dblclick", Master.download); 

    $("#btnSearch").click(function() { 
     ..... 
     .... 
     //load data 
     Master._resSolDataSource.read(); 
    }); 
} 

//richiamato ogni volta che si clicca su una riga (se la griglia è selectable: true) 
Master.onRowChange = function() { 

    var model = this.dataItem(this.select()); 

    Master.SelectedDocument = {}; 
    Master.SelectedDocument.IdDocument = model.Id; 
    Master.SelectedDocument.Stato = model.Stato; 
    Master.SelectedDocument.AnnoRiferimento = model.AnnoRiferimento; 
    Master.SelectedDocument.MeseRiferimento = model.MeseRiferimento; 
    Master.SelectedDocument.Piva = model.Piva; 
} 


//this is called by the button's click 
Master.download = function (e) { 

    //e.preventDefault(); 

    var selDoc = {}; 

    selDoc.IdDocument = Master.SelectedDocument.IdDocument; 
    selDoc.status = Master.SelectedDocument.Stato; 
    selDoc.AnnoRiferimento = Master.SelectedDocument.AnnoRiferimento; 
    selDoc.MeseRiferimento = Master.SelectedDocument.MeseRiferimento; 
    selDoc.Piva = Master.SelectedDocument.Piva; 

    $.ajax({ 
     type: "POST", 
     url: 'PdfManager/Index', 
     data: JSON.stringify(selDoc), 
     contentType: "application/json; charset=utf-8", 
     //dataType: "text", 
     dataType: "html", 
     success: function (event) { 
      var win = window.open(); 
      win.document.write(event); 
     } 
    }); 
} 

1)選中,所以按鈕的點擊事件首先發生。爲了解決這個問題我已經嘗試過通過

setTimeout的包裹按鈕的Click事件的所有代碼(函數(){ .... //點擊事件代碼 },1000);

也與這個問題仍然存在隨機

2)我試圖使用e.preventDefault();在按鈕的單擊事件的開始處,以避免按鈕標記中的某些內容出現干擾,但這不起作用

你能幫助我嗎?你有什麼建議去調查嗎?

你能建議我任何鏈接,資源,視頻,課程學習像劍道一樣的debbugging javascript框架,一步一步地觀看當我點擊一個按鈕時發生了什麼(在我的情況下,瞭解在什麼情況下行不是選擇) 很難調試這樣的應用程序,如果一個人不具備這方面的知識

給我一個手pleaseeeee

+0

我已經用highligt問題更新了我的答案 – Vojtiik

+0

您是否設法使其工作? – Vojtiik

回答

1

當您單擊自定義命令(按鈕),在onChange事件不火,因此您在Master.SelectedDocument中沒有任何內容,並且選擇未發生。從Master.download函數中進行選擇。

嘗試下面的代碼:

Master.download = function (e) { 
    e.preventDefault(); 

// get the row with the button  
var dataItem = this.dataItem($(e.currentTarget).closest("tr")); 

// get the values to your payload object 
var selDoc = {}; 
    selDoc.IdDocument = dataItem.IdDocument; 
    selDoc.status = dataItem.Stato; 
    selDoc.AnnoRiferimento = dataItem.AnnoRiferimento; 
    selDoc.MeseRiferimento = dataItem.MeseRiferimento; 
    selDoc.Piva = dataItem.Piva; 

$.ajax({ 
     type: "POST", 
     url: 'PdfManager/Index', 
     data: JSON.stringify(selDoc), 
     contentType: "application/json; charset=utf-8", 
     //dataType: "text", 
     dataType: "html", 
     success: function (event) { 
      var win = window.open(); 
      win.document.write(event); 
     } 
    }); 
} 

這種方法並忽略onchange情況下,如果你需要使用onchange它仍然需要改變其他用途。

您可以從自定義命令手動突出:

$(e.currentTarget).closest("tr").addClass('highligted') 

或者看看是否這會工作:

grid.select($(e.currentTarget).closest("tr")); 
0

點擊按鈕「某個時候」的事件引發,有時不是(I」我已經用瀏覽器的開發工具 - IE/Firefox刪除了這個)......我不明白爲什麼。

無論如何,你suggestd我,我趕選擇到

Master.download = function (e) { 

    e.preventDefault(); 

    var model = this.dataItem($(e.currentTarget).closest("tr")); 
    Master.SelectedDocument = {}; 
    Master.SelectedDocument.IdDocument = model.Id; 
    Master.SelectedDocument.Stato = model.Stato; 
    Master.SelectedDocument.AnnoRiferimento = model.AnnoRiferimento; 
    Master.SelectedDocument.MeseRiferimento = model.MeseRiferimento; 
    Master.SelectedDocument.Piva = model.Piva; 
    ...... 

,實際效果很好(GREAT !!!!),在這個意義上,我得到正確的數據行,所以我能正確地做其他事情

但問題是,行不「突出了」持續存在(因爲你說我的變化事件沒有發生)

現在,我可以選擇行「編程「爲了提高onchange事件」始終「=

+0

對不起Bobby_D_,這篇文章是在你的一個 – alex

+0

之後它在這裏工作的方式是你不回答你自己的問題與其他答案。如果您發現我的回答對您有幫助+1或標記爲正確,並在評論中提出其他問題或提出全新的帖子。這是其他開發人員下次可以使用並將答案用作參考。 – Vojtiik

+0

我用高亮代碼更新了我的答案 – Vojtiik