2016-09-22 17 views
1

私は以下のノックアウトコードを使ってオブジェクトのプロパティを表示しています。 withを使用するこのオブジェクトのプロパティが存在するかどうかを確認できます。'ko with'が表示されていない場合は、別のコンテンツを表示してください

<!-- ko with: Bunk1 --> 
<div data-bind="css: Color"> 
    <div class="row no-margin"> 
     <div> 
      <div data-bind="text: Name"></div> 
      <div data-bind="text: FirstName"></div> 
     </div> 
    </div> 
</div> 
<!-- /ko --> 

これはモデルです:

var viewModel = function() { 
    var self = this; 
    self.Bunk1 = ko.observable(); 
    self.Bunk2 = ko.observable(); 
    ... 

    ... 

    // 'val' is loaded with $.ajax 
    // this code might not be executed and Bunk1 can fail to initialize. 
    var model = new BunkModel(); 
     model.initModel(val); 
     self.Bunk1(model); 

    ... 
} 

function BunkModel() { 
    var self = this; 
    self.Color = ko.observable(); 
    self.Name= ko.observable(); 
    self.FirstName= ko.observable(); 

    self.initModel = function (values) { 
     self.Color(self.mapColor(values.color)); 
     self.Name(values.name); 
     self.FirstName(values.firstName); 
    } 
} 

私がやりたい何もデータ、ko withelseのようなものが存在しない場合は、代替divを表示することです。オブジェクトのプロパティをバインドすることはできますが、存在しない場合は代替データを表示できます。

+0

何シンプル 'KO程度の場合:Bunk1()=== undefined'または' KO場合:後Bunk1()=== null'なので ' ko withブロック? – Stijn

+0

は「未定義」について知らなかった。もしBunk1()=== undefinedが動作すれば 'ko 'null 'は' self.Bunk1 = ko.observable();の後で初期化されているように見えるので動作しません。 –

+0

OK、それを答えに変換します。まず最初に聞いたのは明らかですが、おそらくノックアウトの初心者ではないかもしれません:) – Stijn

答えて

1

値を渡さずに新しい観測値を作成する場合、その値はundefinedになります。これは、あなたは、単に既存のwithブロックの下条件ブロックを追加することができます意味:観察可能な、それ自体ではなく、その根底にある価値が定義されていない場合は、このような比較を行うときに括弧を使用する必要が

<!-- ko if: Bunk1() === undefined --> 
content here 
<!-- /ko --> 

注、Bunk1 === undefinedをチェックします。

1

@ Stijn答えに加えて。

あなたが使用できる "ifnot" 結合:

<!-- ko ifnot: Bunk1 --> 
content here 
<!-- /ko --> 
+1

これは実際には 'undefined'が[falsey]であるため動作します(http://stackoverflow.com/questions/19839952/all-falsey)。値 - in - javascript)。 – Stijn

関連する問題