2010-08-31 14 views

risposta

3

Sto cercando la stessa cosa. Sembra raccolto magro. Quello che sembrava il più promettente per me è persistence.js. Anche Impel sembra buono ma, sfortunatamente, sembra che non sia stato aggiornato in un anno e mezzo. ActiveRecord.js potrebbe finire per funzionare, ma non sembra che stiano ancora supportando Web SQL. Spero che qualcuno pubblichi altre opzioni.

+0

persistence.js esso è. – bennedich

1

Sto anche cercando la stessa cosa. JazzRecord sembra un candidato probabile.

7

Ce n'è uno nuovo chiamato JayData library, questo è come EntityFramework (o NHibernate) per la piattaforma JavaScript: fornisce JavaScript Language Query (JSLQ) e JavaScript CRUD. Supporta anche definizioni di modelli, navigationProperties e relazioni 1..1.0, 1..m, m..n.

copia un breve codesnippet su come usarlo:

//define storage model: Department and Employee in a 1..m relation 

$data.Entity.extend("$org.types.Department", { 
    Id: { type: "int", key: true, computed: true }, 
    Name: { type: "string", required: true }, 
    Address: { type: "string" }, 
    Employees: { type: "Array", elementType: "$org.types.Employee", inverseProperty:"Department" } 
}); 


$data.Entity.extend("$org.types.Employee", { 
    Id: { type: "int", key: true, computed: true }, 
    FirstName: { type: "string", required: true }, 
    LastName: { type: "string", required: true }, 
    Department: { type: "$org.types.Department", inverseProperty:"Employees"} 
}); 

$data.EntityContext.extend("$org.types.OrgContext", { 
    Department: { type: $data.EntitySet, elementType: $org.types.Department }, 
    Employee: { type: $data.EntitySet, elementType: $org.types.Employee } 
}); 

È possibile codificare contro l'OrdContext e le collezioni in esso. La riga seguente crea un'istanza contesto che è sostenuta da WebSQL locale (si dispone di altre opzioni come IndexedDB o OData)

var context = new $org.types.OrgContext({ name: "webSql", databaseName: "OrgDB" }); 

aggiungere alcuni dati

var department = new $org.types.Department({ Name: 'Finance', Employees: [] }); 

var emp1 = new $org.types.Employee({ FirstName: 'John', LastName: 'Smith'}); 
department.Employees.push(emp1); 

var emp2 = new $org.types.Employee({ FirstName: 'Jane', LastName: 'Smith'}); 
emp2.Department = department; 

context.add(department); 
context.add(emp2); 

context.saveChanges(); 

Ora che si dispone di dati nel punto vendita che può interrogarlo. Le query JSLQ sono supportate nei campi entità, oltre ai campi di navigazione che puntano nella direzione m..1. (Nella versione 1.0 è possibile non direttamente contro navProperties 1..m. È possibile aggirare questo con l'espressione in

//filter 
context.Employees 
    .filter(function(emp) { return emp.LastName == 'Smith' }) 
    .toArray(...); 

//filter 
context.Employees 
    .filter(function(emp) { return emp.FirstName.startsWith('J') || 
            emp.LastName.toLowerCase.contains('mith') }) 
    .toArray(...); 

//filter2 
context.Employees 
    .filter(function(emp) { return emp.Department.Id == 1 }) 
    .toArray(function(emps) { }); 

//filter2 + eager load 
context.Employees 
    .include("Department") 
    .filter(function(emp) { return emp.Department.Id == 1 }) 
    .toArray(function(emps) { }); 


//map/project 
context.Employees 
    .filter(function(emp) { return emp.Department.Id == 1 }).toArray(...) 
    .map(function(emp) { return { EmployeeName: emp.FirstName + emp.LastName, 
           DepartmentName: emp.Department.Name }}) 
    .forEach(function(item) { ... }) 
Problemi correlati