【问题标题】:Convert JSON string from the server to an observable array将来自服务器的 JSON 字符串转换为可观察数组
【发布时间】:2014-10-05 12:28:03
【问题描述】:

在我的 javascript 中;

var tenderStatusChoices = '@Html.Raw(Model.TenderStatusChoices)';

我得到以下数据;

var tenderStatusChoices = '
    [{
        "Disabled": false,
        "Group": null,
        "Selected": true,
        "Text": "Open",
        "Value": "Open"
    }, {
        "Disabled": false,
        "Group": null,
        "Selected": false,
        "Text": "Successful",
        "Value": "Successful"
    }, {
        "Disabled": false,
        "Group": null,
        "Selected": false,
        "Text": "Unsuccessful",
        "Value": "Unsuccessful"
    }]';

我不能使用这个 JSon 来填充组合框,当我这样做时,我得到以下错误;

"初始化可观察数组时传递的参数必须是数组,或者为null,或者未定义。"

那么如何把这个Json字符串转成ko能理解的数组呢?

填充组合的代码如下;

<select id="TenderStatus" data-bind="
    options: tenderStatusChoices,
    optionsText: 'Text',
    optionsValue: 'Value',
    value: status">
</select>

var temp = '@Html.Raw(Model.TenderStatusChoices)';
var tenderStatusChoices = JSON.stringify(eval("(" + temp + ")"));

var Tender = function () {
    this.tenderId = ko.observable("@Model.Tender.TenderId");
    this.title = ko.observable("@Html.Raw(Model.Tender.Title)");
    this.estimateNumber = ko.observable("@Model.Tender.EstimateNumber");
    this.status = ko.observable("@Model.Tender.Status");
    this.tenderStatusChoices = ko.observableArray(tenderStatusChoices);
};

ko.applyBindings(Tender);

【问题讨论】:

标签: asp.net-mvc json knockout.js


【解决方案1】:

您需要使用映射插件或手动循环遍历您的数据。

this.tenderStatusChoices = ko.observableArray(JSON.parse(temp));

或者使用映射插件

this.tenderStatusChoices = ko.observableArray(ko.mapping.toJS(temp));

【讨论】:

  • 我希望映射解决方案能够正常工作,尽管它没有任何区别。我不清楚 ToJS 或 fromJS 之间有什么区别。使用 JSON.parse 方法,应用程序将失败,因为: 'tenderStatusChoices' 未定义。我不明白这是为什么。
  • toJS 将 observableArray 转换为计划对象数组,而 fromJSON 反之亦然
  • JSON.parse 解决方案有效。出于这个原因,我给你的答案打勾。映射解决方案由于某种原因不起作用。
猜你喜欢
  • 1970-01-01
  • 2019-03-15
  • 1970-01-01
  • 2018-02-23
  • 1970-01-01
  • 1970-01-01
  • 2019-06-04
  • 1970-01-01
  • 2012-04-07
相关资源
最近更新 更多