Dynamic queries

by JayData

HTML

<script src="http://include.jaydata.org/datajs-1.0.3.js"></script>
<script src="http://jaydata.dev.avangrade.org/build/jaydata.js"></script>
<div id="output">
</div>

JavaScript

$data.service("http://jaydata.org/examples/Northwind.svc/", function (f) {
    var db = f();
    
    function genericFilter1(tableName, fields, values) {
        //works with JayData 1.2.3+
        $('#output').append("<h3>Search: " + tableName + " for fields: " + JSON.stringify(fields) +"</h3>");
        var q = db[tableName];
        fields.forEach(function(fieldName, idx) {
            q = q.filter("it." + fieldName + " == p ", {p: values[idx]});
        });
        
        return q.toArray();
    }
    
    function genericFilter2(tableName, fields, values) {
        //works with JayData 1.3+
        $('#output').append("<h3>Search: " + tableName + " for fields: " + JSON.stringify(fields) +"</h3>");
        var q = db[tableName];
        fields.forEach(function(fieldName, idx) {
            q = q.filter(fieldName," == ",  values[idx]);
        });
        
        return q.toArray();
        
    }
    
    $.when(db.ready).then(function (db) {
        genericFilter1("Products", ["Category_ID","Supplier_ID"],[1,18]).then(dumpResults);

        genericFilter2("Products", ["Category_ID","Supplier_ID"],[2,1]).then(dumpResults);
        //db.Products.toArray(dumpResults);
    })   
    
    function dumpResults(results) {
        results.forEach(function(result) {
            $('#output').append("<div>" + JSON.stringify(result) + "</div>");
        });
    }
});