2011-11-25 22 views
9

通常,我是KnockoutJS中模板數據綁定的afterAdd屬性的忠實粉絲。但是,我發現我的afterAdd回調總是被擊中3次,我不知道爲什麼。我做錯了什麼嗎?KnockoutJS調用空白元素的Add函數

回調的工作是這樣的:

  • 電話1:textnode
  • 召喚2:我不在乎實際的元素有關
  • 召喚3:textnode

要應付,我所有的處理程序最終檢查isElementContentWhitespace,如下所示:

HTML

<ul class="t" data-bind="template: {name: 'itemTmplt', foreach: items, afterAdd: function(elem, idx, val) {my.ko.itemAdd(elem, idx, val);} }"> 
</ul> 
<script id="itemTmplt" type="text/html"> 
    <li class="tbl" data-bind="attr: {id: name}"> 
     <h3 data-bind="text: name"></h3> 
    </li> 
</script> 

JS

my.ns("mme.ko"); 
my.ko = (function() { 
    "use strict"; 

    return { 
     itemAdd: function (elem, idx, val) { 
      if (elem.isElementContentWhitespace) { return; } 

      /*** do stuff here ***/ 
     } 
    }; 
}()); 

回答

8

afterAdd敲除發現您的範本目前被稱爲的foreach節點。

如果你不想來檢查節點類型,那麼你可以剝除空白在你的模板,如:

<script id="itemTmplt" type="text/html"><li class="tbl" data-bind="attr: {id: name}"><h3 data-bind="text: name"></h3></li></script> 

有了這個模板,你只會看到afterAdd稱爲li元素。