2012-02-13 32 views
0

我有一個簡單的模板塊:JQuery的TMPL knockout.js單擊不及格項目

<script id="selectedCust" type="text/x-jquery-tmpl"> 
{{each people}} 
<div class="section" personid="${Personid}" > 
    <div class="sectionActions"> 
     <div> 
      <a class="action" href="#" data-bind='click: removePerson'>Remove</a> 
     </div> 
    </div> 
</div> 
{{/each}} 
</script> 

簡單的HTML塊:

<div id="customersArea" data-bind="template: 'selectedCust'"> 
</div> 

與淘汰賽JS:

function viewModel() { 
      var self = this; 
      self.people = ko.observableArray(); 
      self.removePerson = function (person, ev) { 
       self.people.remove(person); 
      }; 
      self.setPeople = function (ppl) { 
       var len = ppl.length; 
       for (var i = 0; i < len; i++) { 
        this.people.push(ppl[i]); 
       } 
      }; 
     } 

    var mainViewModel = new viewModel(); 
    ko.applyBindings(mainViewModel, $("#customersArea")[0]); 

我可以設置人員並查看數據綁定,但是當removePerson被調用時,person參數始終是mainViewModel永遠不會是instan CE。當我嘗試$ root.remove時,我得到了相同的結果,嘗試$ parent.remove我得到$ parent是未定義的。

不訴諸ev參數我做錯了什麼?

添加包括(按順序),該#selectedCust塊可在此之後或knockout.js之後,它在$父仍然出現了錯誤:

<script src="/Scripts/jquery-1.7.1.js" type="text/javascript"></script> 
<script src="/Scripts/modernizr-2.0.6-development-only.js" type="text/javascript"></script> 
<script src="/Scripts/jquery.validate.min.js" type="text/javascript"></script> 
<script src="/Scripts/jquery.validate.unobtrusive.min.js" type="text/javascript"></script> 
<script src="/Scripts/jQuery.tmpl.min.js" type="text/javascript"></script> 
<script src="/Scripts/knockout-2.0.0.js" type="text/javascript"></script> 
<script src="/Scripts/jquery-ui-1.8.16.min.js" type="text/javascript"></script> 
<script src="/Scripts/jquery-blockUI.js" type="text/javascript"></script> 

我只是把它改爲ko.js的模板:

<div class="section" data-bind="attr: { 'personid': PersonId }" > 
    <div class="sectionActions"> 
     <div><a class="action" href="#" data-bind='click: $parent.removePerson'>Remove</a></div> 
    </div> 
</div> 

和那個作品...所以這是一個與淘汰使用tmpl的問題?

回答

1

你試過嗎?

<div><a class="action" href="#" data-bind='click: $parent.removePerson'>Remove</a></div> 

根據敲除文檔「註釋1」,您需要在循環中用$ parent作爲序言。 Link

編輯 BTW我想我會分享這個位置:

「請注意,截至2011年12月,jQuery.tmpl不再正在積極發展在適當的時候,將succeded。由JsRender,目前尚未公測。「 LINK

+0

我試過了,得到一個「Uncaught ReferenceError:$ parent not defined」 – maxfridbe 2012-02-14 00:10:18

+0

你可以發佈你的javascript包含嗎? – Etch 2012-02-14 14:20:42

+0

添加了包含的問題。 – maxfridbe 2012-02-14 15:41:07

0

我發現的一個問題是類「section」的div缺少關閉「div」標記。我懷疑這是在DOM中創建格式錯誤的對象。

+0

對不起,複製粘貼錯誤。 – maxfridbe 2012-02-14 00:06:01