2011-11-25 11 views
9

सामान्य रूप से, मैं नॉकआउटजेएस में टेम्पलेट डेटाबेसिंग के बाद संपत्ति का एक बड़ा प्रशंसक हूं। हालांकि, मुझे लगता है कि मेरे बाद अतिरिक्त कॉलबैक हमेशा 3 बार मारा जाता है, और मुझे यकीन नहीं है कि क्यों। क्या मैं कुछ गलत कर रहा हूँ?knockoutJS कॉलिंग के बाद व्हाइटस्पेस तत्वों पर अतिरिक्त फ़ंक्शन

कॉलबैक इस तरह काम करते हैं:

  • कॉल 1: textnode
  • कॉल 2: वास्तविक तत्व मुझे परवाह के बारे में
  • कॉल 3: textnode

सामना करने के लिए, मेरे संचालकों के सभी निम्न के रूप में IsElementContentWhitespace के लिए चेक होने का अंत हो:

एचटीएमएल

<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> 

जे एस

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 नोड कि नॉकआउट अपने खाके में पाता है।

आप नहीं है nodeType के लिए जाँच करने के लिए है, तो आप की तरह अपने खाके में खाली स्थान के पट्टी कर सकते हैं:

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

इस टेम्पलेट, आप केवल afterAddli तत्व पर बुलाया देखेंगे के साथ।

संबंधित मुद्दे