JayData 1.2 is here

Author: Peter Aron Zentai September 18th, 2012

, , , ,

[This article is still in the process of editing.]

There’s been quite a time since our previous release, JayData 1.1.1 back in July. In the meantime we relentlessly worked on completing the vision of high level, abstract data management in JavaScript – on every device and in every tiers. In general, following the eat your own dog food principle, in the past two months JayData has been used and built upon quite extensively in all the three major usage scenarios:

  • JayData as client in browser and apps
  • JayData as client in the server tier
  • JayData as server in the server tier (new in v1.2)

What’s new in JayData 1.2

JayData core: all async operations now support promises

JayData core: Q.js promise library is supported via the qDeferred.js module

JayData already had support for jQuery.deferred for the Queryable.toArray and Queryable.forEach async operations. Now all the async ops (first, single, remove, saveChanges, etc) support deferred return value. Also you can swap jQuery.deferred to Q (another promise library with the same syntax). See this post for details.

JayData core: convenience “order” function on Queryable

Instead of Queryable.orderBy and Queryable.orderByDescending that take a field selector predicate you can use Queryable.order to sort by exactly one column. The syntax is: Queryable.order(“ColumnName”). To reverse sort place a dash as the first character of the column name: Queryable.order(“-ColumnName”)

JayData core: Context and set scoped events

JayData now provides several lifecycle events regarding entity creation, update or delete. Use the context scoped events for notification or the set scoped events to actively modify the behavior of an operation with altering the data before it gets to the wire or cancelling the operation. Read the whole story here.

JayData knockoutjs integration: Announcing JayGrid 1.0 Beta

We have created a handy grid component that provides customizable CRUD operations for arbitrary JayData entities. All of the 7 providers are supported as data source. Building a simple CRUD application has never been so easy before. Read more here…

JayData Server: Use JayData to create your own OData endpoint with JavaScript and MongoDB in a NodeJS environment

[Documentation is yet to be released.]

OData provider: optimistic concurrency, EF [Timestamp] attribute support

JayData now fully supports OData/EF optimistic concurrency model to detect server side changes in the model. Read this blog post for more.

OData provider: support for MERGE, DELETE and POST methods

Instead of sending all updates with $batch, JayData now support the RESTful invocation of update, delete, create operations with MERGE, DELETE and POST methods respectively if there is only one item in the change tracker. Multiple items still use $batch. See the details here.

OData provider: dynamic OData metadata resolution

There is a new way of creating and loading the JavaScript client context generated from the OData $metadata service. Instead of statically generating it with JaySvcUtil.exe you can now use the $data.service method to dynamically connect to arbitrary OData endpoints. This lets for generic use cases when the OData endpoint changes frequently or is not known at development time. For the details see this post.

OData provider: support for Service Operations with complex type array results

Now you can use OData services that have service operations with a return value of type “array of complex types”. See this blog post on how to work with server side functions (aka service operations) with the help of JayData.

Other highlights

New: OData provider supports $data.Object type for untyped JSON transfer

New JayData provider: mongoDB provider

New in JayData server: OData Expression Parser for JavaScript


FIX JaySvcUtil: XML namespace agnostic approach is applied due to the ever changing default namespace of the OData metadata document

FIX ModelBinder: correctly finds converters for primitive types in all cases

FIX OData provider: provider now only submits changed properties to the server (not all loaded properties)

FIX OData provider: supports Titanium environment’s weird way of passing XHR response data

FIX OData provider: The include statement “A.B.C” where B.C is a complex type results in a correct “B.C” member

FIX OData provider: $count result type is now number

FIX SqLite provider: DropTablesIfExist strategy did not work under Titanium.

FIX mongoDB provider: equalTyped (===) expression is supported

FIX mongoDB provider: whereCompiler mistreated arrays

FIX mongoDB provider: ObjectID type when it is also a key is correctly serialized in all cases

FIX mongoDB provider: configCompiler now consults type resolution when encountering a non-primitive type

FIX mongoDB provider: searching a value in array typed fields now converts to mongoDB partial array equality expression instead of array index expression.

, , , ,