【问题标题】:Knockout mappingOptions for ko.mapping.toJSON()-methodko.mapping.toJSON() 方法的淘汰映射选项
【发布时间】:2015-04-12 07:22:57
【问题描述】:

问题

我正在尝试将修改后的 viewModel 发送回我的服务器。不幸的是,我必须使用 ko.mapping.fromJSON() 和一些 mappingOptions 创建我的 viewModel,这工作正常。现在我需要一种简单的方法来将创建的 viewModel 转换回原始方案。

想要的结果

我想转换这个:

var myModel = {
    simpleProp: "test",
    complexProp: {
        simpleProp2: "test2",
        simpleProp3: "test3"
    }
};

进入那个(JS):

var myModel = {
    simpleProp: "test",
    modifiedToSimpleProWithNewName: "test2"
};

给我这个 JSON:

{"simpleProp":"test","modifiedToSimplePropWithNewName": "test2"}

尝试

我在想,由于 ko.mapping.toJSON 有一个映射参数,所以就像为这个方法创建另一个映射一样简单。但似乎 ko.mapping 实际上忽略了我的自定义属性创建:

var mappingOptions = {

    // ignored
    'simpleProp': {
        create: function (thing) {
            return "Changed simpleProps value";
        }
    },

    // working
    ignore: ["simpleProp3"]

};

更多信息

我为你创建了一个jsFiddle

请注意:我已经简化了使用 fromJSON 删除模型生成的示例:

// created and modified by ko.mapping.fromJSON - with custom mapping!
var myModel = {
    simpleProp: "test",
    complexProp: {
        simpleProp2: "test2",
        simpleProp3: "test3"
    }
};

结果将是:

{"simpleProp":"test","complexProp":{"simpleProp2":"test2"}}

如您所见,将应用 ignore 选项,而不会应用 'simpleProb'/create

非常感谢任何帮助。谢谢!

PS:我知道这种映射不会达到预期的结果。这只是一个“'simpleProp'会被修改吗?”-测试。

【问题讨论】:

    标签: javascript knockout.js knockout-mapping-plugin


    【解决方案1】:

    toJSON 方法的映射插件将与 JSON.stringify 函数一样,在将对象字符串化为 JSON 之前检查并使用对象上可能存在的任何 toJSON 方法的返回值。

    因此你可以这样做 (updated jsfiddle):

    var myModel = {
        simpleProp: "test",
        complexProp: {
            simpleProp2: "test2",
            simpleProp3: "test3"
        },
        toJSON: function () {
            return {
                simpleProp: this.simpleProp,
                complexProp: this.complexProp.simpleProp2
            };
        }
    };
    

    只需使 toJSON 方法按照您希望的方式格式化对象,您就可以开始了。

    【讨论】:

    • 非常感谢!这使一切变得更容易。我确定我错过了文档中的这一点。
    • 这让我大吃一惊。多年来一直广泛使用 ko,甚至从未想过要这样做。好问题,更好的答案。
    猜你喜欢
    • 2013-07-16
    • 1970-01-01
    • 1970-01-01
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    • 2012-12-05
    • 2015-03-30
    • 2017-07-07
    相关资源
    最近更新 更多