2010-08-31 6 views

Répondre

3

Je cherche la même chose. Cela ressemble à des pickings minces. Celui qui m'a semblé le plus prometteur est persistence.js. Impel semble également bien, mais, malheureusement, il semble qu'il n'a pas été mis à jour dans un an et demi. ActiveRecord.js pourrait finir par fonctionner, mais il ne semble pas encore qu'ils supportent Web SQL. J'espère que quelqu'un postera plus d'options.

+0

persistence.js il est dans la version 1.0, vous ne pouvez pas directement contre navProperties de 1..m.. – bennedich

1

Je cherche aussi la même chose. JazzRecord ressemble à un candidat probable.

7

Il y en a un nouveau appelé JayData library, celui-ci est comme EntityFramework (ou NHibernate) pour la plate-forme JavaScript: fournit JavaScript Language Query (JSLQ) et JavaScript CRUD. Prend également en charge les définitions de modèle, les propriétés de navigation et les relations 1..1.0, 1..m, m..n.

copier un court codesnippet sur la façon de l'utiliser:

//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 } 
}); 

Vous pouvez coder contre le OrdContext et les collections qu'il contient. La ligne suivante va créer une instance de contexte qui est soutenue par websql locale (vous avez d'autres options comme IndexedDB ou OData)

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

Ajouter des données

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(); 

Maintenant que vous avez données dans le magasin que vous peut l'interroger. Les requêtes JSLQ sont prises en charge sur les champs d'entité, ainsi que les champs de navigation qui pointent dans la direction m..1. (Vous pouvez contourner cela avec l'expression 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) { ... }) 
Questions connexes