8

私はExtJSでどうしてできないのか試して驚いた。コードブロックで説明しましょう。

jQueryで

console.clear();
var a = {
    b:5、
    c:4、
    o:{
        l:2、
        p:2
    }
}

var b = {
    k:4、
    l:3、
    c:5、
    o:{
        m:2、
        l:1
    }
}

var ex = $ .extend(true、a、b);
console.dir(ex)

これが出力です

ex = {
    a:{
        q:2
    }、
    b:5、
    c:5、
    o:{
        l:1、
        p:2、
        m: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 に答える