2012-02-15 16 views
24

पर आधारित स्थिति को बदलती है तो मैं केवल एक तालिका दिखाने में सक्षम होना चाहता हूं यदि किसी सरणी में आइटम हैं। मैंने अपनी जरूरतों को इस jsfiddle उदाहरण में सरल बना दिया है।knockout.js यदि सरणी खाली है या

जे एस:

var view_model = { 
    lines: ko.observableArray([ 
     { 
     content: 'one'}, 
    { 
     content: 'two'}, 
    { 
     content: 'three'}, 
    { 
     content: 'four'}, 
     ]), 
    remove: function(data) { 
     view_model.lines.remove(data); 
    } 
}; 

ko.applyBindings(view_model); 

HTML:

<span data-bind="visible:lines">Lines Exist</span> 
<ul data-bind='foreach:lines'> 
    <li> 
     <button data-bind="click:$parent.remove"> 
      Remove 
     </button> 
     <span data-bind="text:content"></span> 
    </li> 
</ul> 

असल में मैं कहाँ लाइनों तालिका से हटाया जा सकता है एक वेब एप्लिकेशन है। यदि array.length == 0, मैं पूरी तालिका को छिपाना चाहता हूं।

उत्तर

38

आप इसे कई तरीकों से कर सकते हैं। लाइन सरणी में कोई प्रविष्टि नहीं है, तो नीचे की पहेली पूरी तालिका को छिपाने के लिए कंटेनरलेस बाइंडिंग का उपयोग करती है।

http://jsfiddle.net/johnpapa/WLapt/4/

<span data-bind="visible:lines">Lines Exist</span> 
<!-- ko if: lines().length > 0--> 
<p>Here is my table</p> 
<ul data-bind='foreach:lines'> 
    <li> 
     <button data-bind="click:$parent.remove"> 
      Remove 
     </button> 
     <span data-bind="text:content"></span> 
    </li> 
</ul> 
<!-- /ko -->​ 
+1

दिखाई दिया क्या यह वास्तव में एक समय में काम करता था? 'डेटा-बाइंड =" दृश्यमान: रेखाएं "अब काम करने के लिए प्रकट नहीं होती है। अपनी पहेली की जांच करें। 'डेटा-बाइंड =" दृश्यमान: रेखाएं() लंबाई "काम करता है, लेकिन कम सुरुचिपूर्ण है:/ – Will

+0

मैंने बस पहेली को चलाया, लाइनों को हटा दिया और यह तालिका हटा दी। –

+1

अजीब, यह मेरे लिए नहीं है। http://i.stack.imgur.com/onb6q.png – Will

7

एक अन्य समाधान, अपने मूल प्रयास पर मामूली बदलाव:

<div data-bind="visible:lines().length"> 
    <span>Lines Exist</span> 
    <p>Here is my table</p> 
    <ul data-bind='foreach:lines'> 
     <li> 
      <button data-bind="click:$parent.remove"> 
       Remove 
      </button> 
      <span data-bind="text:content"></span> 
     </li> 
    </ul> 
</div> 
+0

इस टिप्पणी के रूप में, यह काम करता है जबकि चयनित उत्तर नहीं है। – Will

0

यह बुरा व्यवहार एचटीएमएल टेम्पलेट के लिए तर्क जोड़ने के लिए माना जाता है। मैं इस समाधान का सुझाव:

<div data-bind="with: lines">  
    <span data-bind="if: length">Lines Exist</span> 
    <ul data-bind='foreach:$data'> 
     <li> 
      <button data-bind="click:$parent.remove"> 
       Remove 
      </button> 
      <span data-bind="text:content"></span> 
     </li> 
    </ul> 
</div> 
+5

मुझे अभी भी वही तर्क दिखाई देता है? – Alex

0

अगर आप इस jsfiddle उदाहरण की तरह संदेश या छवि दिखाना चाहते हैं

<div data-bind="visible:lines().length"> 
    You will see this message only when "lines" holds a true value. 
    <img src=""/> 
</div> 

यदि आप संदेश छुपाना चाहते हैं जब तालिका लाइनों datas सफलतापूर्वक

<div data-bind="visible: !lines().length"> 
    You will see this message only when "lines" holds a false value. 
    <img src=""/> 
</div> 
संबंधित मुद्दे