javascript - 使用 Knockout 从 Json 创建对象时遇到问题

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

好的,场景是我有一个对象列表,它本身包含一个对象列表。我试图将外部对象放入 View 模型中的列表中,并尝试将内部对象转换为我作为具有额外属性的模型创建的对象,如下所示 -

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 和 knockout 绝对是新手。任何帮助,将不胜感激。

这就是我现在所拥有的,它似乎正在发挥作用。

    $.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);
});

最佳答案

你在用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);
});

关于javascript - 使用 Knockout 从 Json 创建对象时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24665274/

相关文章:

model-view-controller - MVC - 相同的 URL,多个 View

asp.net-mvc - MVVM 模式的核心是什么?

javascript - 如何观察对象数组的变化

asp.net - 从书签 AJAX 调用 asp

c# - 如何正确反序列化 Json DateTimeOffset?

model-view-controller - SailsJs : if I need to mix data from 2 unrelated Models, 我应该在模型中还是在 Controller 中执行此操作?

javascript - 使用localstorage存储大量对象的最佳实践

javascript - result.data.data.map 不是一个函数

javascript - 从 x 轴过渡 :Bar Chart

javascript - 我可以以特定方式格式化通过 PHP 的 json_encode() 编码的变量的语法吗?