2010-08-31 5 views

ответ

3

Я ищу то же самое. Кажется, это тонкие подборки. Тот, который выглядел наиболее перспективным для меня, - persistence.js. Impel также выглядит хорошо, но, к сожалению, похоже, что он не обновлялся через полтора года. ActiveRecord.js может закончиться разработкой, но похоже, что они еще не поддерживают веб-SQL. Надеюсь, кто-то опубликует еще несколько вариантов.

+0

persistence.js это. – bennedich

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) { ... }) 
Смежные вопросы