2014-11-05 235 views
2

其中一列在我的handsontable定製渲染器有以下要求:不同的基礎上,是不是表的一部分值Handsontable - 根據單元格值

設置單元格顏色。以下是完整的代碼 -

http://jsfiddle.net/3b1nc46b/

var objectData = [ 
    {id: 1, name: "Ted Right", address: "NY", value:{old_value:"10", new_value:"15"}}, 
    {id: 2, name: "Frank Honest", address: "CA", value:{old_value:"12", new_value:"12"}}, 
    {id: 3, name: "Joan Well", address: "TX", value:{old_value:"20", new_value:"28"}} 

];

var valueRenderer = function (instance, td, row, col, prop, value, cellProperties) { 
var background_color = ''; 
if (value.old_value == value.new_value) { 
    background_color = 'white'; 
} else { 
    background_color = 'yellow'; 
} 
value = value.new_value; 
Handsontable.renderers.NumericRenderer.apply(this, arguments); 
$(td).css({ 
    background: background_color 
}); 

};

如果old_value不等於new_value,那麼在這個「Value」列中需要着黃色,否則背景應該是白色的。首先,我將new_value和old_value放置在數據源中嵌套的「值」項中。這工作,但它造成的其他問題:

  1. 當您單擊編輯細胞時,它顯示「[對象的對象]」,而不是價值 - 這是有道理的,因爲我已經在通過「價值」列清單,而不是
  2. 背景顏色不保留到解決這個問題將有一個包含OLD_VALUE隱藏列,並用它來比較和設置

單向「value.new_value」渲染器。但是,如果表格有10列或更多,並且如果每列都需要根據上述條件進行着色,則會很快變得太大(在保存功能期間也需要特殊處理)

什麼是最好的如何做到這一點?

+0

您是否找到針對您的問題的解決方案?因爲我需要傳遞一個對象作爲值來做一些驗證。 – SuperMarco 2015-09-10 16:02:34

回答

1

除了自定義渲染器之外,還需要設置自定義編輯器。

然後,在您的自定義渲染器和編輯器中,您可以控制「保留」邏輯或更改背景顏色。

我剛剛在這裏回答了一個相關問題:Binding Handsontable cells to complex objects。該示例不使用數字渲染器作爲基礎,因此您可以完全控制dom元素。

我相信答案和問題中引用的許多文檔都有幫助。

最後,documentation here示例中的「渲染自定義HTML標頭」一節中的示例似乎也與您的問題有一些重疊。

相關問題