2015-11-02 49 views
0

我想讓我的代碼能夠在單元格更改時立即更新數據庫表。但是,我可以得到更改的單元格的值,而不是下一個單元格的數據。Slickgrid - 如何獲得編輯單元格的值?

方法我都試過已經沒有成功:

grid.onCellChange.subscribe(
    function (e, args) { 
     //alert(data[args.row][grid.getColumns()[args.cell].field]); 
     //alert(grid.getColumns()[args.cell].name); 
     //alert(args); 
     <% 
      updateDatabase("UPDATE table1 "+ 
          "SET "+ 
          " col1="+data[args.row][grid.getColumns()[args.cell].field]+" "+ 
          "WHERE "+ 
          " col2="+???)") 
     %> 
    } 
); 

如何讓我可以在where子句中使用下一列的值?

回答

5

解決您的問題:

如果檢查出的官方SlickGrid Editing演示,你可以試試下面得到一個基本的瞭解電網的編輯是如何工作的。打開你的JS調試器,並使用以下命令訂閱電網onCellChange事件:

grid.onCellChange.subscribe(
    function (e,args) { 
     console.log('row: ' + args.row + ' cell: ' + args.cell) 
    }); 

網格的onCellChange事件args參數對象包含兩個屬性:

  • 細胞

現在編輯任何單元格,並且離開剛剛編輯的單元格。這一點很重要,因爲此事件只會在模糊事件中觸發。

在控制檯登錄,您將例如看到:

行:6格:1

解決您的數據對象

我發現怎麼會只有這樣,你地址你的數據來源是在hackish方式只使用eval()。有關對象屬性訪問的更多信息,您可以檢查this答案。


從JavaScript行話了一下:

實際eval()命令與給定字段名屬性名解決您的數據對象是:

eval('data[args.row]'+'.'+columns[args.cell].field) 

簡體它將評估以字符串形式表示的JavaScript代碼,在這個SlickGrid Editing example它將成爲,如果你這樣寫:

data[6].title 

所以的概念證明代碼是:

grid.onCellChange.subscribe(
    function (e,args) { 
     console.log(eval('data[args.row]'+'.'+columns[args.cell].field)) 
    }); 

這將返回當前編輯單元格的值。例如,更改args.cell+1將返回網格數據源中的下一個單元格值。當然,您應該始終檢查columns.length屬性以將列索引鍵保留在數組邊界內。


關於你提到的有關updateDatabase呼叫想法:你爲什麼要更新每次經過此事件被解僱的數據庫?我建議你看看有編輯表格的官方Composite editor演示。

其他的事情,我會強烈建議是,你不服務器或後面直接代碼代碼到的javascript代碼塊。例如,您可以使其使用ajax post

我推薦這個的原因是因爲那麼你將有分開的功能分開responsibilities。只要堅持這個原則本身就可以讓你有一個更清晰的代碼,你也只能給出一個改變的理由。此外,它可以幫助您更輕鬆地使用您的功能testing

相關問題