diff --git a/apps/tests/ui/observable-tests.ts b/apps/tests/ui/observable-tests.ts
index 6e6be3322..9f6cc36e8 100644
--- a/apps/tests/ui/observable-tests.ts
+++ b/apps/tests/ui/observable-tests.ts
@@ -18,6 +18,27 @@ class TestObservable extends observable.Observable {
}
}
+export var test_Observable_Constructor = function () {
+ //
+ // ### Creating an Observable
+ // ``` JavaScript
+ var json = {
+ Name: "John",
+ Age: 34,
+ Married: true
+ };
+ var person = new observable.Observable(json);
+ var name = person.get("Name");
+ var age = person.get("Age");
+ var married = person.get("Married");
+ //// console.log(name + " " + age + " " + married); // Prints out "John 34 true" if uncommented.
+ // ```
+ //
+ TKUnit.assert(name === "John", "Expected name is John");
+ TKUnit.assert(age === 34, "Expected age is 34");
+ TKUnit.assert(married === true, "Expected married is true");
+}
+
export var tests_DummyTestForCodeSnippet = function () {
//
// ### Responding to property changes
diff --git a/data/observable/observable.d.ts b/data/observable/observable.d.ts
index b40d38b06..aec400c75 100644
--- a/data/observable/observable.d.ts
+++ b/data/observable/observable.d.ts
@@ -44,6 +44,12 @@ declare module "data/observable" {
* Observable is used when you want to be notified when a change occurs. Use on/off methods to add/remove listener.
*/
class Observable {
+
+ /**
+ * Creates an Observable instance and sets its properties accroding to the supplied JSON object.
+ */
+ constructor(json?: any);
+
/**
* Gets the name of the constructor function for this instance. E.g. for a Button class this will return "Button".
*/
diff --git a/data/observable/observable.ts b/data/observable/observable.ts
index ad203e5db..e9da614e6 100644
--- a/data/observable/observable.ts
+++ b/data/observable/observable.ts
@@ -13,6 +13,16 @@ export module knownEvents {
export class Observable implements definition.Observable {
private _observers = {};
+ constructor(json?: any) {
+ if (json) {
+ for (var prop in json) {
+ if (json.hasOwnProperty(prop)) {
+ this.set(prop, json[prop]);
+ }
+ }
+ }
+ }
+
get typeName(): string {
return types.getClass(this);
}