2012-01-02 18 views
0

Я совершенно новый для плагина нокаута, и я пытаюсь создать комментарий с этим плагином. У меня есть некоторые проблемы, когда дочерний комментарий связывается с родительским комментарием, ожидаемый jinn-стробируемый объект должен быть чем-то вроде ниже;(об использовании плагина для нокаута) как связать дочерний объект-массив как наблюдаемый с родительским наблюдаемым символом

[ 
    { 
    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

Сейчас ваш ChildFeedModel это объект, который содержит ChildFeeds observableArray, поэтому, когда вы назначаете это к ChildFeeds собственности на вашем wallfeedsmodel, вы в конечном итоге с двойным ChildFeeds.

Один из вариантов заключается в том, чтобы ваш ChildFeedsModel фактически был наблюдаемым массивом. Таким образом, вы создадите наблюдаемый массив, расширьте его любыми дополнительными методами/свойствами и вернете его.

Что-то вроде:

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; 
}; 

Я изменил его, чтобы начать с строчной буквой, потому что теперь будет не требуется new заявления при создании одного (она всегда возвращает новый observableArray).

Теперь в вашем wallfeedsmodel вы бы просто присвоить ему нравится:

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

Пример здесь: http://jsfiddle.net/rniemeyer/xAKK5/

+0

это здорово спасибо большое – salihozkul

 Смежные вопросы

  • Нет связанных вопросов^_^