2011-08-10 77 views
3

當模板呈現時,爲什麼點擊甚至會被showFlawDetails解僱?即使當jQuery模板呈現時knockout.js調用點擊

app.viewModel.caseStudy.showFlawDetails = function (index) { 
     console.log(index); 
     app.viewModel.caseStudy.selectedFlaw(index); 
    }; 

<script id="flawTemplate" type="text/html"> 
    {{each(index, value) $data}} 
    <div class="flaw"> 
    <div class="Title" data-bind="click: app.viewModel.caseStudy.showFlawDetails(index)"> Flaw: ${value.Title} </div> 
    <div class="Items" data-bind="visible: app.viewModel.caseStudy.selectedFlaw() == index"> 
    <div>Title: <input type="text" data-bind="value: value.Title" /></div> 
    <div>Check: <input type="text" data-bind="value: value.Check" /></div> 
    {{each(index1, value1) value.Details}} 
     <div>${value1.Key}: <input type="text" data-bind="value: value1.Value" /></div> 
    {{/each}} 
    </div> 
    </div> 
    {{/each}} 
</script> 

回答

4

點擊(和事件)綁定期望您將它傳遞給函數的引用,而不是它的實際評估。

因此,在你的情況下,它試圖設置點擊事件等於的結果

爲了使這項工作,你要麼需要將其包裝在一個匿名函數,如:

click: "function() { app.viewModel.caseStudy.showFlawDetails(index); }"

,或者如果你不喜歡匿名函數,那麼你就需要找到一種方法來將函數移動到caseStudy對象並在您的caseStudy對象上放置索引,以便您可以直接訪問它。如果它有助於查看我的this post中的事件綁定中的避免匿名函數。

而且,這裏是通過訂閱更改其父observableArray維護對象的索引屬性的一個示例:http://jsfiddle.net/rniemeyer/CXBFN/

+0

排序是非常甜蜜。我的下一個任務就是要做那樣的事情。你是Knockout.js的臉。 –

+0

這是另一個問題,但是您可以將刪除任務添加到該示例中嗎? –

+0

有幾種方法可以做到這一點。下面是一個示例,其中父進程傳遞給構造函數並用於'removeMe'函數。 http://jsfiddle.net/rniemeyer/xJNqg/ –