【问题标题】:Trouble creating object from Json using Knockout使用 Knockout 从 Json 创建对象时遇到问题
【发布时间】:2014-08-31 03:55:05
【问题描述】:

好的,场景是我有一个对象列表,它本身包含一个对象列表。我试图将外部对象放在我的 View-Model 的列表中,并试图将内部对象转换为我创建的具有额外属性的模型的对象,就像这样 -

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 = [[object Object],[object Object],[object Object],[object Object],[object Object],]

我绝对是 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);
});

【问题讨论】:

    标签: javascript json model-view-controller mvvm knockout.js


    【解决方案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);
    });
    

    【讨论】:

    • 这不是我想要做的。我相信我已经修好了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-02
    • 1970-01-01
    • 2017-08-25
    相关资源
    最近更新 更多