Browse Source

Bigger readme, with example.

Herbert Vojčík 12 years ago
parent
commit
ab4ee9e282
1 changed files with 60 additions and 2 deletions
  1. 60 2
      README.md

+ 60 - 2
README.md

@@ -1,2 +1,60 @@
-Widgets usable for AngularJS-like two-way binding
-in Amber.
+What is trapped?
+----
+
+Trapped is a library for Amber that aims to create bidirectional data-binding UI for Amber.
+When it is for Amber, how else should it be called than "trapped"?
+
+It is inspired by AngularJS. But it does not aim to be hard port of AngularJS into Amber,
+it just tries to bring some of the good things, but stay true to Amber/Smalltalk way of doing web UI.
+
+What stage it is in?
+----
+
+Very early. Nevertheless, very basic things are already working.
+You _can_ try it, though it still misses a lot.
+
+What is working:
+ - viewmodel -> view update propagation
+ - showing simple data in view.
+
+What is missing:
+ - optimizations ;-)
+ - iterations in view
+ - view -> viewmodel change propagation
+
+How can I try it?
+----
+
+Clone this repo, with submodules as well (amber is bundled as submodule).
+Then start the server: `node vendor/amber/server/server.js`. It start on port 4000.
+Visit `http://localhost:4000/demo.html` in your browser. Amber IDE opens.
+
+Trapped itself is in `Trapped-Frontend` and `Trapped-Backend` packages.
+Rhe demo page itself is in `demo.html` and its code is in `Trapped-Demo` package,
+in classes `App` and `AppView`.
+Other classes in `Trapped-Demo` are just prototype implemenations of Trapped
+building blocks. They may be deleted in the future or move to frontend/backend packages
+when they mature.
+Anyway, the code of the page is in `App` (the view model) and `AppView` (the view).
+Trapped is pretty light: the view model wraps any object (via `payload:`,
+as seen in `App >> initialize`). The view is subclass of plain `Widget`, but inside it,
+uses of `trapShow:` (which itself uses `trap:read:`) and `trapDescend:` allows you
+to bind data from view model.
+
+To see viewmodel->view update working, try
+
+```smalltalk
+| app |
+app := Trapped current byName: 'App'. "to get to the App instance. Normally you remember it yourself."
+app modify: #('items') do: [ :old | old, { '!' } ] "use modify:do: to change viewmodel"
+```
+
+The number and list of items should update. If you do
+
+```smalltalk
+| app |
+app := Trapped current byName: 'App'. "to get to the App instance. Normally you remember it yourself."
+app modify: #('title') do: [ :old | 'My title' ] "use modify:do: to change viewmodel"
+```
+
+The title of the page as well as header should be updated.