2016-09-23 4 views
0

私はこれに関するいくつかの答えを見つけましたが、物事をまとめることはできませんでした。ノックアウトを使用する最初の日ので、私は完全に間違って考えている場合はお知らせください!forEachはKnockoutJSのオブジェクトプロパティを持っています

私が持っているコメントのリストを表したいと思います。コメントは、このような{:...、スコア:テキスト...、...}のように複数の属性含ま

を私はビューモデル

var MatchupViewModel = function(comments) { 
 
    this.comments = ko.observableArray(comments); 
 
} 
 

 
ko.applyBindings(new MatchupViewModel(comments), document.getElementById("leftchat"));

を持っていることを理解し、私はforEachのはややこのようになっていることを理解する:私は使用していヒスイで

  • (:
これは、テキストが、私はそれができただろう期待していた属性である関数で、ではないと文句を言い

<div id="leftchat" data-bind="forEach: comments" class="chat"> 
 
    <div class="fullMessage"> 
 
    <div class="content"> 
 
     <p data-bind="text: text, visible: text" class="textcontent"></p><img data-bind="visible: isImage, attr={src: url}" class="imagecontent"/> 
 
    </div> 
 
    <div class="scorecontainer"> 
 
     <div class="buttonContainer"> 
 
     <p bind-data="click=voteComment(id, true)" class="likeButtonMessage">&#x25B2</p> 
 
     <p bind-data="click=voteComment(id, false)" class="dislikeButtonMessage">&#x25BC</p> 
 
     </div> 
 
     <p data-bind="text: score" class="messageScore"></p> 
 
    </div> 
 
    </div> 
 
</div>

:HTMLに変換

#leftchat.chat(data-bind="forEach: comments") 
 
       .fullMessage 
 
        .content 
 
         p.textcontent(data-bind="text: text, visible: text") 
 
         img.imagecontent(data-bind="visible: isImage, attr={src: url}") 
 
        .scorecontainer 
 
         .buttonContainer 
 
          p.likeButtonMessage(bind-data="click=voteComment(id, true)") &#x25B2 
 
          p.dislikeButtonMessage(bind-data="click=voteComment(id, false)") &#x25BC 
 
         p.messageScore(data-bind="text: score")

見つけるには。これを回避するにはどうしたらいいですか?

+0

我々は「コメント」オブジェクトがどのように見えるかの例を見た場合、あなたを助けるために容易になるだろう。データバインドの代わりに2つのタイプミスのバインドデータがあることに注意してください。 – Tyblitz

+0

ありがとう! - 今すぐコメントは次のようになります: {text:String、src:String、isImage:Boolean、src:String、score:Number} –

答えて

1

タイプミスを修正した場合は、 k。 forEachforeachで、bind-datadata-bindである必要があります(カスタムバインディングを作成した場合を除く)。 下記の例をご覧ください。 textが偽の値(ヌル、空文字列)の場合、ノードは非表示になります。そうでない場合、その値が表示されます。これはobservableプロパティについても同様です。

var m = { 
 
    comments: [ 
 
    {text: 'a'}, 
 
    {text: ko.observable('') }, 
 
    {text: null}, 
 
    {text: ko.observable('c')} 
 
    ] 
 
}; 
 

 
ko.applyBindings(m);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script> 
 
<div id="leftchat" data-bind="foreach: comments" class="chat"> 
 
    <div data-bind="text: text, visible: text" class="textcontent"></div> 
 
</div>

+0

うわー。私は今、自分のことがとても嫌いです。どうもありがとう! –

1

することも、多分これallthough根本的な配列は、(なしにうまく働くべきである適切に評価する必要があります。この data-bind="forEach: comments()"

にこの data-bind="forEach: comments" を変更するには、この data-bind="text: $data"

にこの data-bind="text: text, visible: text" を変更してみてください())

+0

まずはお返事いただきありがとうございます! 私は... = "text:text"を... = "text:$ data"に変更しましたが、これを行うと古典的な[オブジェクトオブジェクト]が追加されます。私がしようとすると... = "text:$ data.textもう一度それが関数を見つけることができないと訴える。 –

+0

私のためにフィドルを作ることができれば、私はあなたに適切な、働く応答を与えることができました^^ – MKougiouris

+0

ここにフィドルです: https://jsfiddle.net/aL8ogr6b/1/ –

関連する問題