2014-07-09 63 views
0

好的,場景是我有一個包含對象列表的對象列表。我試圖把外部對象的列表在我的視圖模型,我試圖把內部對象到我的模型創建了一個額外的屬性,像這樣的對象 -從Json使用Knockout創建對象時遇到問題

function Tag(data, isChecked) { 
    var TagId = ko.observable(data.TagId); 
    var Description = ko.observable(data.Description); 
    var IsActive = ko.observable(data.IsActive); 
    var checked = ko.observable(isChecked) 
} 

這裏我是如何做到的。

$.each(parentTags, function (i, tag) { 
    var tempTag = tag[i]; 
    for (Object in tag.ChildTags) 
    { 
     var checked = false; 
     for(checkedItem in savedTags) 
     { 
      if(tag.ChildTags[Object].TagId === savedTags[checkedItem]) 
      { 
       checked = true; 
      } 
     } 
     //var tempChild = new Tag(tag.ChildTags[Object], checked); 
     tempTag.ChildTags.push(new Tag(tag.ChildTags[Object], checked)); 
    } 
    viewModel.ModelTags.push(tempTag); 
}); 

parentTags = [[對象的對象],[對象的對象],[對象的對象],[對象的對象],[對象的對象],]

我肯定新到JSON和基因敲除。任何幫助,將不勝感激。

這就是我現在所看到的,它似乎工作。

$.each(parentTags, function (i, tag) { 
    var tempTag = new Tags(JSON.parse(JSON.stringify(tag))); 
    tempTag.ChildTags().length = 0; 

    for (Object in tag.ChildTags) { 
     var checked = false; 
     for (checkedItem in savedTags) { 
      if (tag.ChildTags[Object].TagId === savedTags[checkedItem]) { 
       checked = true; 
      } 
     } 

     tempTag.ChildTags().push(new Tag(tag.ChildTags[Object], checked)); 
    } 
    viewModel.ModelTags().push(tempTag); 
}); 

回答

1

你在做什麼var tempTag = tag[i];?變量tag已經是parentTags的第i個成員。

如果我理解正確的話,試試這個:

function Tag(data, isChecked) { 
    // not "var TagId", please. 
    this.TagId = ko.observable(data.TagId); 
    this.Description = ko.observable(data.Description); 
    this.IsActive = ko.observable(data.IsActive); 
    this.checked = ko.observable(isChecked); 
} 

$.each(parentTags, function (i, tag) { 
    // map each child tag into a Tag object 
    var tags = $.map(tag.ChildTags, function(cTag) { 
     return new Tag(cTag, $.inArray(cTag.TagId, savedTags)); 
    }); 

    // replace with Tag objects 
    tag.ChildTags = tags; 

    // push modified tag onto vm 
    viewModel.ModelTags.push(tag); 
}); 
+0

這並不完全是我要怎樣做。我相信我修正了它。 – Fulmetal5