2012-11-09 52 views
3

我有一個由Ember.Router創建的控制器,並且這會填充一個表。如何在事件中更新集合中的綁定類

模板:

{{#each key in controller}} 

    {{#view App.TestView contentBinding="key"}} 

    <tr {{bindAttr class="view.isSelected"}} {{action selectKey this on="click" target="view" }}> 
    <td>{{key.id}}</td> 
    <td><button type="button" class="btn btn-danger" {{action removeKey on="click" target="view"}}>Remove</button></td> 
    </tr> 

    {{/view}} 

{{/each}} 

背後的代碼:

App.TestView = Em.View.extend({ 
    removeKey: function() { 
    var key = this.get('content'); 
    this.bindingContext.removeObject(key); 
    return false; 
    }, 
    selectKey: function (event) { 
    this.set('theClass', 'warning'); 
    }, 
    theClass: 'selectable', 
    isSelected: function() { 
    return this.get('theClass'); 
    }.property('theClass') 
}); 

我期待onclick事件來改變類,以「警告」,併爲集合中的行會以黃色突出顯示(按照css類),但是這不會發生。 isSelected屬性似乎並沒有更新DOM,我不明白爲什麼它不這樣做。

的jsfiddle這裏:http://jsfiddle.net/EsF4R/114/

+0

你可以發佈jsfiddle嗎? – Ryan

+0

好的,[你在這裏](http://jsfiddle.net/EsF4R/114/) – Deif

回答

2

我認爲的Metamorph和表結構之間的衝突。給標籤<tr>到視圖和把類<td>元素的結合,似乎讓它工作,即使我想生成的HTML仍然是怪異的(尤其是<script x-start><script x-end>

看到修改後的提琴在這裏: http://jsfiddle.net/Sly7/EsF4R/126/

編輯

這裏是好看匹配標籤小提琴。 http://jsfiddle.net/Sly7/EsF4R/129/ 此外,它更堅持你想要的行爲,即處理類綁定和點擊tr元素,而不是td

+0

啊非常感謝你。奇怪你是不是很審美,但仍然功能?或者你腦子裏還有別的東西? – Deif

+0

如果看一下DOM中,'<腳本ID = 「的Metamorph-0啓動」 類型= 「文本/ X-佔位符」> <腳本ID = 「的Metamorph -6-開始」> 1 <腳本ID = 「的Metamorph -6-端」> <腳本ID = 「的Metamorph-O-端」> ....' 我寧願所述的Metamorph-O-端將到達關閉tbody後。 –