0

Windows Azure Mobile Service を使用して、アプリのバックエンドを構築しています。サーバー スクリプトの読み取り操作のために、スクリプト内の $filter や $select などのクエリ パラメータを取得したいと考えています。

4

1 に答える 1

1

「read」関数のパラメーターで「query」オブジェクトをハッキングした後 ( console.log を使用して)、最終的に解決策を見つけました。

function isObject(variable) {
    return variable !== null && 
        variable !== undefined && 
        typeof variable === 'object';
}

// Find all the member-value pairs from the expression object
function findMemberValuePairsFromExpression (expr, ret) {
    if (!isObject(expr)) {
        return null;
    }
    ret = ret || {};
    for (var name in expr) {
        if (expr.hasOwnProperty(name)) {
            var prop = expr[name];
            if (name === 'parent') { // Ignore parent property since it's added by us
                continue;
            }
            else if (name === 'left') { // member expression are in the left subtree
                if (isObject(prop)) {
                    prop.parent = expr; // Remember the parent
                    findMemberValuePairsFromExpression(prop, ret);
                }
            }
            else if (name === 'member') {
                // Found a member expression, find the value expression 
                // by the knowledge of the structure of the expression
                var value = expr.parent.right.value;
                ret[prop] = value;
            }
        }
    }

    if (expr.parent) {
        // Remove the added parent property
        delete expr.parent;
    }

    return ret;
}

// Get the filters component from query object and 
// find the member-value pairs in it
function findMemberValuePairsFromQuery (query) {
    var filters = query.getComponents().filters;
    return findMemberValuePairsFromExpression(filters);
}

function read (query, user, request) {
    request.execute();
}

このアプローチは、クエリ オブジェクトの内部構造に大きく依存しているため、将来壊れる可能性があることに注意してください。

query.getComponents() は、「select」、「skip」、「top」など、クエリの他の部分も返します。基本的には oData プロトコルのすべて

于 2012-11-22T10:56:08.417 に答える