2012-01-02 7 views
0

私はノックアウトプラグインには新しく、このプラグインでcommentthreadを構築しようとしています。私は子供のコメントが親コメントにバインドされているときにいくつかの問題を抱えています。予想されるjsonの文字列化されたオブジェクトは以下のようなものでなければなりません。(about Knockout Pluginを使う)親オブジェクトobservablearrayとしてchildオブジェクト配列を親observablearrayにバインドする方法

[ 
    { 
    CreatedBy: "user 1", 
    CreatedOn: Date(), 
    Description: "comment 1", 
    ChildFeeds: [ 
       { 
        CreatedBy: "user 2", 
        CreatedOn: Date(), 
        Description: "comment 1-1" 
       }, 
       { 
        CreatedBy: "user 3", 
        CreatedOn: Date(), 
        Description: "comment 1-2" 
       }, 
       { 
        CreatedBy: "user 4", 
        CreatedOn: Date(), 
        Description: "comment 1-3" 
       } 
       ] 
    }, 
    { 
    CreatedBy: "user 5", 
    CreatedOn: Date(), 
    Description: "comment 2", 
    ChildFeeds: [ 
       { 
        CreatedBy: "user 6", 
        CreatedOn: Date(), 
        Description: "comment 2-1" 
       }, 
       { 
        CreatedBy: "user 7", 
        CreatedOn: Date(), 
        Description: "comment 2-2" 
       } 
       ] 
    }, 
] 

しかし、コードを実行すると、上記の構造の代わりに以下のデータが得られます。ここ

[ 
    { 
    "CreatedBy": "user 1", 
    "CreatedOn": "Mon Jan 02 2012 15:50:51 GMT+0200 (Turkey Standard Time)", 
    "Description": "comment 1", 
    "ChildFeeds": [ 
     { 
     "ChildFeeds": [ 
      { 
      "CreatedBy": "user 2", 
      "CreatedOn": "Mon Jan 02 2012 15:50:51 GMT+0200 (Turkey Standard Time)", 
      "Description": "comment 1-1" 
      }, 
      { 
      "CreatedBy": "user 3", 
      "CreatedOn": "Mon Jan 02 2012 15:50:51 GMT+0200 (Turkey Standard Time)", 
      "Description": "comment 1-2" 
      }, 
      { 
      "CreatedBy": "user 4", 
      "CreatedOn": "Mon Jan 02 2012 15:50:51 GMT+0200 (Turkey Standard Time)", 
      "Description": "comment 1-3" 
      } 
     ] 
     } 
    ] 
    }, 
    { 
    "CreatedBy": "user 5", 
    "CreatedOn": "Mon Jan 02 2012 15:50:51 GMT+0200 (Turkey Standard Time)", 
    "Description": "comment 2", 
    "ChildFeeds": [ 
     { 
     "ChildFeeds": [ 
      { 
      "CreatedBy": "user 6", 
      "CreatedOn": "Mon Jan 02 2012 15:50:51 GMT+0200 (Turkey Standard Time)", 
      "Description": "comment 2-1" 
      }, 
      { 
      "CreatedBy": "user 7", 
      "CreatedOn": "Mon Jan 02 2012 15:50:51 GMT+0200 (Turkey Standard Time)", 
      "Description": "comment 2-2" 
      } 
     ] 
     } 
    ] 
    } 
] 

あなたは、残念ながら、私はそれぞれの親オブジェクトに対して二回ChildFeedsオブジェクト配列を複製し、間違ったコーディングのため..あなたがに最善のアプローチは何かhttp://jsfiddle.net/6qAmu/5/

ここからコードを見つけることができることに気づくでしょうこの問題を解決するには?

おかげ

答えて

2

今、あなたのChildFeedModelChildFeeds observableArrayを含むオブジェクトであるので、あなたがあなたのwallfeedsmodelChildFeedsプロパティにこれを割り当てるとき、あなたは二重のChildFeedsで終わります。

1つの選択肢は、ChildFeedsModelを実際にobservableArrayにすることです。したがって、observableArrayを作成し、追加のメソッド/プロパティでそれを拡張し、それを返します。以下のような

何か:1を作成するとき、それは今(それは常に新しいobservableArrayを返す)new文を必要としないので、

var childFeedModel = function(ChildFeeds) { 
    var result = ko.observableArray(); 

    result.addChildFeed = function(tempChildFeed) { 

     result.push({ 
      CreatedBy: tempChildFeed.CreatedBy, 
      CreatedOn: tempChildFeed.CreatedOn, 
      Description: tempChildFeed.Description 
     }); 
    }; 

    ko.utils.arrayForEach(ChildFeeds, function(feed) { 
     result.addChildFeed(feed); 
    }); 

    return result; 
}; 

私は、小文字で開始するように変更しました。ここ

return { 
     CreatedBy: singlefeed.CreatedBy, 
     CreatedOn: singlefeed.CreatedOn, 
     Description: singlefeed.Description, 
     ChildFeeds: childFeedModel(singlefeed.ChildFeeds) 
    }; 

サンプル:http://jsfiddle.net/rniemeyer/xAKK5/

+0

素晴らしいそんなにありがとうごwallfeedsmodelあなたはそれが好き割り当てますで今すぐ

、 – salihozkul

関連する問題