【问题标题】:Specify object type after using ko.mapping.fromJS使用 ko.mapping.fromJS 后指定对象类型
【发布时间】:2015-02-13 16:41:00
【问题描述】:

我正在尝试克隆 Knockout VM。 我发现了一些例子:

var oldType = new myVM();
var newType = ko.mapping.fromJS(ko.toJS(oldType));

它工作正常,但 newType 现在是 object 而不是我想要的 myVM 类型。有没有办法将newType 指定为myVM

谢谢。

【问题讨论】:

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


    【解决方案1】:

    我的回答可能有点偏见,因为我不喜欢淘汰制映射功能,我认为它会助长不良习惯。

    如果我这样做,我会在 myVM 上创建一个构造函数,它接受 myVM 的实例作为参数,然后在构造函数中设置所有属性,然后我会手动编写映射。

    也就是说,您可以使用剔除映射做您想做的事:

    var oldType = new myVM();
    var newType = new myVM();
    ko.mapping.fromJS(ko.toJS(oldType), newType);
    

    编辑 刚刚检查了淘汰赛文档以刷新我的记忆,您实际上可能需要将新类型作为第三个参数传递,并将一个空选项对象作为第二个参数:

    ko.mapping.fromJS(ko.toJS(oldType), {}, newType);
    

    虽然example page 似乎表明两种方式都有效,但我对此表示怀疑。

    【讨论】:

    • 我完全按照你写的那样试过了。由于某种原因,newType 是空的,并且没有 oldType 的任何字段。
    • 您是否尝试过以空对象作为第二个参数的编辑版本?
    • 是...未捕获的类型错误:对象不是函数
    • 奇怪,我刚刚创建了一个简单的小提琴,它可以工作:jsfiddle.net/sv80u5k2
    • 你说得对......好吧,我的虚拟机要复杂得多,我猜它会因为它的实现而失败。无论如何谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    • 2021-07-02
    • 1970-01-01
    • 2015-11-06
    • 2014-01-12
    • 2020-10-03
    相关资源
    最近更新 更多