2012-02-15 7 views
24

Yalnızca bir dizideki öğeler varsa, bir tablo gösterimini kullanmak istiyorum. Bu jsfiddle örneğine gereksinimlerimi basitleştirdim.knockout.js, dizinin boş olup olmadığına bağlı olarak görünür durumu değiştir

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> 

Temelde satırları tablodan çıkarılabilir bir web uygulaması var. array.length == 0 ise, tüm tabloyu gizlemek istiyorum.

cevap

38

Bunu çeşitli yollarla yapabilirsiniz. Aşağıdaki küme satır dizisi girişleri yoksa tüm tabloyu gizlemek için kapsayıcı bağlamaları kullanır.

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

ortaya çıktığında mesajı gizlemek istiyorsanız Bu aslında bir seferde mi çalıştı? data-bind = "visible: lines" 'artık çalışmıyor. Kemanını kontrol et. data-bind = "visible: lines(). length" 'çalışır, ancak daha az zarif:/ – Will

+0

Sadece kemanı çalıştırdım, çizgileri kaldırdım ve tabloyu kaldırdım. –

+1

Garip, benim için değil. http://i.stack.imgur.com/onb6q.png – Will

7

orijinal denemede Başka bir çözüm, hafif varyasyon:

O html şablonuna mantığı eklemek için kötü uygulama olarak kabul edilir
<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

Bu yorumdan yola çıkarak, seçilen cevap cevap vermez. – Will

0

. Bu çözüm önermek:

<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

Hala aynı mantığı görüyor muyum? – Alex

0

bu jsfiddle örnekteki gibi ileti veya resim göstermek istiyorum

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

tablo çizgileri veriler başarıyla

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