2016-02-22 51 views
0

我想,如果声明knockoutjs与数据绑定使用:如果knockoutjs约束力不工作

例如这是否应该是假的,并在格文应该被隐藏:

<!-- this is what i am trying to get working. --> 
    <div data-bind="if: little">rank : little</div> 

我的猜测这件作品是否按预期工作。它应该返回false,因为开始时的clickCount为0.

this.little = function(){ 
    return this.clickCount() > 5; 
    }; 

我粘贴了app.js和index.html的代码。

这是app.js

var ViewModel = function(){ 
    this.clickCount = ko.observable(0); 
    this.name = ko.observable('Tabby'); 
    this.imgSrc = ko.observable('img/2.jpg'); 
    this.imgAttribution = ko.observable('http://www.flickr.com/photos/big'); 


    this.incrementCounter = function() { 
    this.clickCount(this.clickCount() + 1); 
    }; 


    // this is not returning false as it should. 
    this.little = function(){ 
    return this.clickCount() > 5; 
    }; 

} 

ko.applyBindings(new ViewModel()); 

这是index.html的

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Cat Clicker</title> 
</head> 
<body> 

    <div> 

     <h2 data-bind="text: name"></h2> 
     <div data-bind="text: clickCount"></div> 

     <!-- this is what i am trying to get working. --> 
     <div data-bind="if: little">rank : little</div> 

     <img src="" alt="cute cat" data-bind="click: incrementCounter, attr:{src: imgSrc}"> 

    </div> 
    <script src="js/lib/knockout-3.2.0.js"></script> 
    <script src="js/app.js"></script> 
</body> 
</html> 
+2

作为一个函数,“小”是永远是真的。测试'小()'而不是。 –

+0

就像@RoyJ所说的,很少有一个函数,只是因为它存在它的计算结果为真。在Knockout中进行调试的一个好方法是用'text'替换你的'if's。用'little'和'little()'写出你的代码。 http://codepen.io/mblarsen/pen/QyXObm – Michael

+0

它可能是你认为你的“小”是一个可计算的可观察值,这就是为什么你没有把这些“()”。 – Adrian

回答

0

嗨,你可以使用可视绑定淘汰赛

下面的代码会为你工作:

<div data-bind="visible: !little()">rank : little</div> 
          OR 
    <div data-bind="visible: little()">rank : little</div>