1

「Ext.applyIf」関数とダブルパイプのリファレンスについては、これらの記事を参照してください。

http://docs.sencha.com/core/manual/content/utility.html

http://homepage.ntlworld.com/kayseycarvey/controlflow4.html

誰かがこのロジックがExtJSフレームワークで何をしているのか説明できますか?パイプの最初の行で(特に)私の解釈が正しいことを確認したいと思います。

        var params = Ext.applyIf(operation.params || {}, this.extraParams || {}), request;
        params = Ext.applyIf(params, this.getParams(params, operation));
        if (operation.id && !params.id) {
            params.id = operation.id;
        }

ASP.NET asmxカスタムサーバープロキシクラスから取得:

Ext.define('Ext.ux.AspWebAjaxProxy', {
    extend: 'Ext.data.proxy.Ajax',
    require: 'Ext.data',

    buildRequest: function (operation) {
        var params = Ext.applyIf(operation.params || {}, this.extraParams || {}), request;
        params = Ext.applyIf(params, this.getParams(params, operation));
        if (operation.id && !params.id) {
            params.id = operation.id;
        }

        params = Ext.JSON.encode(params);

        request = Ext.create('Ext.data.Request', {
            params: params,
            action: operation.action,
            records: operation.records,
            operation: operation,
            url: operation.url
        });
        request.url = this.buildUrl(request);
        operation.request = request;
        return request;
    }
});
4

2 に答える 2

3
  1. ダブルパイプは、デフォルトを指定するためのJavaScriptのトリックです。Evanが提案したように、nullポインタの問題を回避するためによく使用されます。この例ではvar a = b||{}、bがnullまたは未定義であっても、aはnullではないことが保証されています。デフォルトのフォールバックはa = {}(空のオブジェクト)になります。
  2. ApplyIfメソッドは、既存のプロパティを上書きしないように注意しながら、プロパティをソースから宛先にコピーします。次の例では、paramsにプロパティが定義されていない限り、extraParamsプロパティがparamsプロパティに追加されます。

    Ext.applyIf(params、extraParams)

実際のコードは次のとおりです。

Ext.applyIf(operation.params || {}, this.extraParams || {}),

これにより、余分なParamsがparamsオブジェクトに追加され、nullポインターの問題が回避され、paramsが上書きされないようになります。

于 2012-12-06T05:54:42.910 に答える
1

検討:

function foo(cfg) {
    cfg = cfg || {};
    console.log(cfg.x);
}

foo({x: 1});
foo();

つまり、基本的に、メソッドに渡されるcfgが「偽」(読み取り、未定義、またはnull)の場合は、空のオブジェクトに設定して、「x」プロパティの読み取り時に参照エラーが発生しないようにします。

于 2012-09-26T00:59:14.207 に答える