2015-11-07 58 views
1

如何在淘汰賽中將當前對象從模板傳遞到函數。這裏是代碼:Knockout.js:將當前對象從jQuery模板傳遞到函數

<div data-bind="foreach: people"> 
    <p> 
    <b data-bind="click: $root.check, text : name"></b> 
    </p> 
</div> 



<div data-bind="template: 'peopleList'"></div> 

<script type="text/html" id="peopleList"> 
    {{each people}} 
     <p> 
      <b data-bind="click: $root.check">${name}</b> is ${age} years old 
     </p> 
    {{/each}} 
</script> 


<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> 
<script src="jquery.tmpl.min.js"></script> 
<script src="knock.js"></script> 

<script> 
var viewModel = function() { 
     this.people = ko.observableArray([ 
      { name: 'Rod', age: 123 }, 
      { name: 'Jane', age: 125 }, 
     ]); 
    this.check = function (val) { 

      console.log('current value', val); 
     } 
} 


    ko.applyBindings(new viewModel()); 



</script> 

如果我從模板外點擊,查看作品excpected,它打印當前的對象,但如果我點擊裏面的模板支票打印視圖模型對象。爲什麼?點擊:$ root.check在第一種情況下打印ex對象{名稱:「簡」,年齡:125},在第二種情況下打印模型視圖模型{}

回答

0

okey我發現解決方案,問題是jquery.tmpl.min .js模板引擎...

+0

請編輯答案和解釋你如何解決這個問題。 – Onik

+0

我剛將它改爲淘汰賽模板... –

1

由於實際的each循環由jQuery模板執行,而非Knockout執行,因此循環內的綁定上下文不會更改。

你必須從jQuery的模板手動獲取它,並把它傳遞給函數:

<b data-bind="click: $root.check.bind($value)">${name}</b> is ${age} years old