1

特定の値より大きい場合、ノックアウトを使用してテキストを非表示にしようとしています。何らかの理由で、私はそれを機能させることができません。テスト ボタンをクリックすると、2 番目のテキスト フィールドが表示されます。

<body class="calc" onLoad="createnav()">
<input type="button" value="test" />

<p data-bind="text: 'This shows', if: 6 > 4" ></p>
<br>    
<p data-bind="text: 'This does Not', if: 6 > qty"></p>

スクリプトは次のとおりです。

function AppViewModel() {
  this.qty = ko.observable("1"); } 
  // Activates knockout.js 
  var app = new AppViewModel(); ko.applyBindings(app);

//When I click button I want the name to change
$('input[type=button]').click( function() {
  var sum = '5';
  app.qty(sum);
});

http://jsfiddle.net/d577K/44/

4

3 に答える 3

4

他の人が指摘しているようqtyに、値ではなく監視可能なオブジェクトを比較していますqty()

ただし、テキストを計算済みにすることも検討してください。

フィドルの例

<p data-bind="text: output"></p>

function AppViewModel() {
    var self = this;
    this.qty = ko.observable("1");
    this.output = ko.computed(function(){
        return (6 > self.qty()) ? "This shows too" : "";
    });
}

これはよりノックアウトに似た方法であり、ロジックをマークアップに混在させるのではなく、ビュー モデル内に保持するという利点があります。

これの他の利点の中でも特に、デバッグ時に JavaScript の値を明確に確認でき、qty が数値ではなく関数であることがわかります。

複数の場所で表示したい場合は、計算を繰り返さずにこの値を再利用することもできます。

于 2013-03-22T03:45:47.423 に答える
0

qty オブザーバブルの値にアクセスする必要があります。

<p data-bind="text: 'This does Not', if: 6 > qty()"></p>

于 2013-03-22T03:40:34.863 に答える
0

単純、

<p data-bind="text: 'This does Not', if: 6 > qty()"></p>

オブザーバブル プロパティが式で使用されている場合、宣言バインディング (括弧なし) は使用できません。

于 2013-03-22T03:41:03.777 に答える