8

我已经尝试过并且很惊讶我怎么不能使用 ExtJS。让我用一个代码块来解释。

在 jQuery 中

控制台.clear();
变种 = {
    乙:5,
    三:4,
    o:{
        升:2,
        人:2
    }
}

变量 b = {
    k: 4,
    l: 3,
    三:5,
    o:{
        米:2,
        升:1
    }
}

var ex = $.extend(true, a, b);
控制台.dir(ex)

这是输出

例如 = {
    一种: {
        问:2
    },
    乙:5,
    三:5,
    o:{
        升:1,
        磷:2,
        米:2
    }
}

Ext apply、applyIf、copyTo 不是这样工作的。如何在 ExtJS 中生成输出?

提前致谢。

4

3 回答 3

11

对于最近的一个项目,我们修改了此示例代码以生成以下方法:

Ext.deepCopy = function(p, c) {
    c = c || (p.constructor === Array ? [] : {});
    for (var i in p) {
        if (typeof p[i] === 'object' && p[i] !== null) {
            c[i] = p[i].constructor === Array ? [] : {};
            Ext.deepCopy(p[i], c[i]);
        } else {
            c[i] = p[i];
        }
    }
    return c;
};
于 2012-04-16T20:14:18.023 回答
5

Ext 不支持深度复制。有Ext.applyExt.applyIf但它们都只适用于哈希映射的第一级,并且将覆盖而不是合并任何嵌入的数组或哈希。

事实上,文档明确指出 Ext.apply 旨在处理配置对象,这并不重要,但这只是为了说明它并不打算用作合并实用程序功能,尽管如果你只想合并它基本上可以第一级/深度。

于 2011-03-16T22:58:02.727 回答
3

使用Ext.Object.merge()方法,这正是您正在寻找的。

于 2014-07-19T12:22:23.390 回答