From 7d15ae82492a3982e975b30216128628ec63c203 Mon Sep 17 00:00:00 2001 From: Rossen Hristov Date: Tue, 24 Mar 2015 12:20:47 +0200 Subject: [PATCH] Implemented Observable constructor that accepts JSON objects. --- apps/tests/ui/observable-tests.ts | 21 +++++++++++++++++++++ data/observable/observable.d.ts | 6 ++++++ data/observable/observable.ts | 10 ++++++++++ 3 files changed, 37 insertions(+) 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); }