json - 如何使用 KnockoutJS 删除不需要的 JSON 节点

标签 json knockout.js

我在发布 json 数据时遇到问题,因为我不知道如何在 ajax 回发期间删除其中一个 json 节点(在本例中为 ServiceOptions)。

首先这是我的 HTML:

<h3>Company Profile:</h3>
<ol style="list-style:none;">
    <li>
        Company Name<br />
        <input id="CompanyName" type="text" data-bind="value:CompanyName" />
    </li>
    <li>
        Service Type<br />
        <select id="ServiceType" data-bind="options:ServiceOptions,optionsText:'text',optionsValue:'value',value:ServiceType,optionsCaption:'Choose....'">
        </select>
    </li>
    <li>
        Street<br />
        <input id="Street1" type="text"  data-bind="value:Street1" /><br />
        <input id="Street2" type="text"  data-bind="value:Street2" /><br />
        <input id="Street3" type="text"  data-bind="value:Street3" />
    </li>
    <li>
        Suburb<br />
        <input id="Suburb" type="text" data-bind="value:Suburb" />
    </li>
    <li>
        Post Code<br />
        <input id="PostCode" type="text" data-bind="value:PostCode" />
    </li>
    <li>
        State<br />
        <input id="State" type="text" data-bind="value:State" />
    <li>
        Telephone<br />
        <input id="Telephone" type="text" data-bind="value:Telephone" />
    </li>
    <li>
        Fax<br />
        <input id="Fax" type="text" data-bind="value:Fax" />
    </li>
    <li>
        Status <input id="IsActive" type="checkbox" data-bind="checked: IsActive" />
    </li>
    <li>
        <button data-bind="click:Update_Click">Update</button>
        <button data-bind="click:Delete_Click">Delete</button>
    </li>
</ol>

我的 JavaScript 是:

    var model = function () {
        var self = this;
        self.CompanyName = ko.observable('');
        self.ServiceType = ko.observable();
        self.ServiceOptions = ko.observableArray(   
            [
                { value: 0, text: 'Dry Cleaning' },
                { value: 1, text: 'Dog Walking' }
            ]
        );
        self.Street1 = ko.observable('');
        self.Street2 = ko.observable('');
        self.Street3 = ko.observable('');
        self.Suburb = ko.observable('');
        self.PostCode = ko.observable('');
        self.State = ko.observable('');
        self.Telephone = ko.observable('');
        self.Fax = ko.observable('');
        self.IsActive = ko.observable(false);
        this.Update_Click = function () {
            alert(ko.toJSON(self));
        };
        this.Delete_Click = function () {
            alert('delete');
        };
    };

    $(document).ready(function () {
        ko.applyBindings(new model);
    });

当我单击“更新”按钮时,我得到

"CompanyName":"","ServiceOptions":[{"value":0,"text":"干洗"},{"value":1,"text":"遛狗"}], "街道1":"","街道2":"","街道3":"","郊区":"","邮政编码":"","州":"","电话":"","传真":"","IsActive":false}

我仍在获取 ServiceOptions,正如您在上面的 JSON 结果中看到的那样。

知道如何修复它吗?

最佳答案

ko.toJSON 内部使用 JSON.stringify,您可以在其中指定 replacer funciton 。在此替换函数中,您需要为您不希望包含在最终 JSON 中的键(属性名称)返回 undefined:

this.Update_Click = function () {
    alert(ko.toJSON(self, function(key, value) { 
         if (key == "ServiceOptions") 
             return undefined;
         return value;
    }));
};

关于json - 如何使用 KnockoutJS 删除不需要的 JSON 节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18201712/

相关文章:

ios - 从 JSON 中获取递归的 NSDictionaries 和 NSArray

json - ReJson - 从第二层键的匹配中检索所有值

json - 控制哪些 blob 被索引 azure 搜索

android - 在android中添加到json对象的链接

javascript - Knockout 在 vi​​ewmodel 中使用外部函数

c# - 无法在现有页面中使用挖空模板

java - 如何在序列化过程中将 JSON 属性名称映射到我们自己的变量名称?

javascript - 如何使用 Knockout 更改 JS(TS) 中选择组件的值?

javascript - 用于逗号分隔数字的 Knockout bindingHandler

knockout.js - 覆盖特定输入的全局验证绑定(bind)验证选项