0

我知道underscorejs模板更有用來替換某種字符串。但是,我可以使用相同的模板機制來基於操作來操作DOM的屬性值嗎?如何使用underscorejs來操作DOM元素的屬性?

比方說,我有一張桌子(kendogrid),我想動態改變一行的背景顏色(下拉菜單將顯示給最終用戶)。我用jQuery來改變背景。但我的老闆堅持要我使用underscorejs的模板。我有點卡住了。

幫助??任何人??

+0

你試圖操縱通過重新渲染DOM和插入模板?如果你避免使用jQuery,你可以通過本地Javascript來操縱DOM。 – Wio

+0

問題是我不知道如何使用underscorejs來實現這個功能。就像我說的,這是我老闆打算使用underscorejs。如果它是純javascript,我很早以前就已經完成了。 ;) – renjith

回答

1

我的猜測是,他們希望您每次更改數據並呈現模板時都會發生一個更改DOM狀態的事件。

HTML:

<div id="container"></div> 
<select id="highlight-choice"> 
    <option value="0">first</option> 
    <option value="1" selected>second</option> 
</select> 

<script id="gridtemplate" type="text/template"> 
    <table id="kendogrid"> 
     <% _.each(rows, function(row) { %> 
      <tr style="background: <%= row.background %>;"> 
       <% _.each(row.columns, function(column) { %> 
        <td><%= column %><td> 
       <% });%> 
      </tr> 
     <% }); %> 
    </table> 
</script> 

的Javascript:(後DOM準備某些部分必須運行)

var compile = _.template(document.getElementById('gridtemplate').innerHTML); 

var data = { 
    rows: [ 
     { 
      columns: [1,2], 
      background: '#fff' 
     }, 
     { 
      columns: [3,4], 
      background: '#ff0' 
     } 
    ] 
}; 

function render() { 
    document.getElementById('container').innerHTML = compile(data); 
} 

render(); 

document.getElementById('highlight-choice').addEventListener('change', function() { 
    _.each(data.rows, function(row) { 
     row.background = '#fff'; 
    }); 
    data.rows[this.value].background = '#ff0'; 
    render(); 
}); 

jsFiddle

+0

謝謝。但我正在使用kendogrid。我不知道如何將下劃線模板添加到kendo rowtemplate。你能給我一個使用kendogrid的例子嗎? – renjith

+0

var row = _.template($(tr +「['+ dataUid +」='「+ uid +」'「)」).css('background-color',<%= empty %>)); var c = dataItem.Color == whiteStyle? '':dataItem.Color; row({empty:c}); – renjith

相關問題