2010-08-31 36 views

回答

3

我在找同樣的東西。這看起來很苗條。最看好我的那個人是persistence.jsImpel也看起來不錯,但不幸的是,它看起來像一年半沒有更新。 ActiveRecord.js最終可能會解決,但它似乎並沒有支持Web SQL。希望有人會發布一些更多的選擇。

+0

persistence.js它。 – bennedich 2011-05-15 10:12:14

1

我也在尋找同樣的事情。 JazzRecord看起來像一個可能的候選人。

7

有一個新的名爲JayData library,這個就像EntityFramework(或NHibernate)的JavaScript平臺:提供JavaScript Language Query (JSLQ)和JavaScript CRUD。還支持模型定義,navigationProperties和1..1.0,1..m,m..n關係。

我複製如何使用它短codesnippet:

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

可以對OrdContext和它集合編碼。下面一行將創建一個由當地的WebSQL支持的上下文實例(您還有其他選項,如IndexedDB的或的OData)

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

添加一些數據

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

現在你已經在存儲數據你可以查詢它。實體字段支持JSLQ查詢,加上指向m..1方向的導航字段。 (在1.0版本中,你不能直接對1..M navProperties,您可以用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) { ... })