JsBeans - Client-server JavaScript Fullstack Web Framework
jsBeans
β ΠΈΠ·ΠΎΠΌΠΎΡΡΠ½ΡΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠΉ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ ΠΊΠ»Π°ΡΡΠ° "full-stack" Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ½ΡΡ
ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΡ
ΡΠ΅ΡΠ΅Π½ΠΈΠΉ Ρ ΡΠ°Π·Π²ΠΈΡΡΠΌ Π²Π΅Π±-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ, ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎΠΉ ΠΈΠ΅ΡΠ°ΡΡ
ΠΈΠ΅ΠΉ ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠΌ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ΠΌ Π½Π° ΡΠ·ΡΠΊΠ΅ JavaScript.
Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π½Π° Java 1.8 Ρ Mozilla Rhino Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠ³ΠΎ JavaScript Π΄Π²ΠΈΠΆΠΊΠ°, Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΌ Web ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ Π½Π° Eclipse Jetty ΠΈ ΡΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠΉ ΡΠΈΠ½ΠΎΠΉ Π½Π° Akka.
ΠΠ»ΡΡΠ΅Π²ΡΠ΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ jsBeans:
- ΠΠ΅Π±-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΈ Π±ΠΈΠ·Π½Π΅Ρ Π»ΠΎΠ³ΠΈΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ Π½Π° Π°ΡΠΎΠΌΠ°ΡΠ½ΡΡ
ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ
JavaScript-ΠΎΠ±ΡΠ΅ΠΊΡΠ°Ρ
- Π±ΠΈΠ½Π°Ρ
(
JavaScript Beans (JSB)
ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ ΡJavaBeans
, Π½ΠΎ Π»Π΅Π³ΡΠ΅). - ΠΠΈΠ½Ρ - Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈ Π·Π°ΠΊΠΎΠ½ΡΠ΅Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΠΊΠ°ΠΊ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠΉ, ΡΠ°ΠΊ ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠΉ ΠΊΠΎΠ΄ (Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅/ΡΠ°ΠΉΠ»Π΅ *.jsb).
- ΠΡΠΎΠ·ΡΠ°ΡΠ½ΠΎΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠΉ ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠΉ ΡΠ°ΡΡΠ΅ΠΉ Π±ΠΈΠ½Π° ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΏΠΎΠ²Π΅ΡΡ Π±Π°Π·ΠΎΠ²ΠΎΠΉ RPC ΡΠΈΠ½Ρ.
- ΠΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ Π±ΠΈΠ½ΠΎΠ²
- ΠΠ±ΠΌΠ΅Π½ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π±ΠΈΠ½Π°ΠΌΠΈ Π² Π΅Π΄ΠΈΠ½ΠΎΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ (ΠΏΠΎΠ²Π΅ΡΡ Actor System).
- ΠΡΡΡΠΎΠ΅Π½Π½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ ΠΈ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΡ ΡΡΠ΅Π΄ΡΡΠ² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ (JSB, Kernel, Cluster, Debugger, ...)
- ΠΡΡΡΠΎΠ΅Π½Π½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΊΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΡ Π²Π΅Π±-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² (JSB.Widgets) ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΠΈΠ· ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ.
- ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ Java "ΠΈΠ· ΠΊΠΎΡΠΎΠ±ΠΊΠΈ"
- jsBeans ΡΠ°ΡΡΠΈΡΡΠ΅ΡΡΡ jar ΠΌΠΎΠ΄ΡΠ»Π΅ΠΌ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΌ: java ΠΊΠΎΠ΄, ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ ΡΠ΅ΡΡΡΡΡ jsBeans, ΡΠ΅ΡΡΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ jsBeans.
Π ΡΠ°ΠΊΠΆΠ΅
- Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌΡΠΉ ΡΠΊΡΠΈΠΏΡ-Π·Π°Π³ΡΡΠ·ΡΠΈΠΊ (Web Page Bootstrap)
- Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΏΠΎΠ΄Π·Π°Π³ΡΡΠ·ΠΊΠ° Π±ΠΈΠ½ΠΎΠ² Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ
- ΠΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΡΠ°Π±Π»ΠΎΠ½ΠΈΠ·Π°ΡΠΎΡΡ *.jsb ΡΠ°ΠΉΠ»ΠΎΠ², Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ
`#dot ...`
- ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π²ΡΠ·ΠΎΠ²Π² ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π±ΠΈΠ½Π° ΡΠ΅ΡΠ΅Π· HTTP (http://my.server.com/index.jsb)
- Π Π°ΡΡΠΈΡΠ΅Π½ΠΈΡ Π±ΠΈΠ½ΠΎΠ² (traits), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠ΅ Π½Π°Π²Π΅ΡΠΈΡΡ Π½Π° Π±ΠΈΠ½Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π».
- ΠΠΈΠ½ΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΈ ΡΠΏΠ°ΠΊΠΎΠ²ΡΠΈΠΊ Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ
- (Π² ΠΏΠ»Π°Π½Π°Ρ
) ΠΠ½Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»Π΅ΠΉ ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²
/** @annotation {...} */
- TODO
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅
- Π Π²ΠΈΠ΄Π΅ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Ρ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΡΠΈΠΊΠ»Π°Π΄Π½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ "ΠΈΠ· ΠΏΠ°ΠΏΠΊΠΈ".
- Π Π²ΠΈΠ΄Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΠΎΠΉ Java Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. ΠΡΠΈΠΊΠ»Π°Π΄Π½ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°ΡΡΡΡ Π² ΠΎΠ±ΡΠΈΠΉ classpath ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
ΠΠΎΠ²ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΡΠ±ΠΎΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΡΠΎΡΠΌΠΈΡΡΡΡΠ΅Π³ΠΎ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ² Ρ ΠΏΡΠ΅Π΄Π½Π°ΡΡΡΠΎΠ΅Π½Π½ΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠ΅ΠΉ Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ.
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Π±ΠΈΠ½Ρ?
Π ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠ΅ΠΉ jsBeans Π²ΡΡ Π»ΠΎΠ³ΠΈΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (ΠΊΠ°ΠΊ ΡΠ΅ΡΠ²Π΅ΡΠ½Π°Ρ, ΡΠ°ΠΊ ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠ°Ρ) ΡΡΡΠΎΠΈΡΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π½Π° ΡΠ·ΡΠΊΠ΅ JavaScript, Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡΡΠΈΡ EJB-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Π² Java EE. ΠΠ½ΠΈ ΠΈΠ·ΠΎΠΌΠΎΡΡΠ½Ρ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ°ΠΌ ΠΠΠ, ΠΌΠΎΠ³ΡΡ ΠΏΠΎΡΠΎΠΆΠ΄Π°ΡΡΡΡ ΠΈ ΡΠ΄Π°Π»ΡΡΡΡΡ, ΠΌΠΎΠ³ΡΡ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎ ΠΈ ΠΌΠΈΠ³ΡΠΈΡΠΎΠ²Π°ΡΡ Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ° Π½Π° Π΄ΡΡΠ³ΠΎΠΉ ΠΈΠ»ΠΈ Π² Π±ΡΠ°ΡΠ·Π΅Ρ. Π’Π°ΠΊΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΌΡ Π½Π°Π·ΡΠ²Π°Π΅ΠΌ - Π±ΠΈΠ½Π°ΠΌΠΈ.
ΠΠΈΠ½Ρ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΡΡ Π² Π²ΠΈΠ΄Π΅ JS ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ². ΠΠ½ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ ΠΏΠΎΠ»Ρ, ΠΎΡΡΠ°ΠΆΠ°ΡΡΠΈΠ΅ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π±ΠΈΠ½Π°, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΡΠ΄ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ
ΠΏΠΎΠ»Π΅ΠΉ ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π΄Π»Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Π±ΠΈΠ·Π½Π΅Ρ Π»ΠΎΠ³ΠΈΠΊΠΈ.
ΠΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ ΠΏΠΎΠ»Ρ Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ Π½Π° $
, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
$name
, $parent
, $require
ΠΈ Ρ.ΠΏ.
ΠΠ΅ΠΊΠ»Π°ΡΠ°ΡΠΈΡ Π±ΠΈΠ½Π° ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ JSB(beanDescriptor);
ΠΈ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
JSB({
$name: 'Foo',
myField: 123,
myMethod: function(){
return this.myField;
}
};
Π€ΡΠ½ΠΊΡΠΈΡ JSB(beanDescriptor)
Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠΎΡΠΌΠΈΡΡΠ΅Ρ ΡΠ°ΠΌ Π±ΠΈΠ½ ΠΏΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Π² beanDescriptor
ΠΈ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ Π΅Π³ΠΎ Π² ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π±ΠΈΠ½ΠΎΠ² (JSB-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ) Ρ ΡΠ΅Π»ΡΡ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅Π³ΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π΅Π³ΠΎ ΠΆΠΈΠ·Π½Π΅Π½Π½ΡΠΌ ΡΠΈΠΊΠ»ΠΎΠΌ. JSB-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΠΈΠ·ΠΎΠΌΠΎΡΡΠ΅Π½ ΠΈ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ ΠΊΠ°ΠΊ Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΡΠ΅ΡΠ²Π΅ΡΠ° ΡΠ°ΠΊ ΠΈ Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π²ΡΡΠ΅ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ Π±ΠΈΠ½ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ ΠΊΠ°ΠΊ ΡΡΠΎΡΠΎΠ½Π΅ ΡΠ΅ΡΠ²Π΅ΡΠ°, ΡΠ°ΠΊ ΠΈ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ΅ (Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅).
JSB.lookup('Foo', function(FooClass){
var foo = new FooClass();
foo.myMethod();
foo.myField = ', World!';
foo.hello('Hello');
});
ΠΡΠ΅ Π±ΠΈΠ½Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡΡΡ Π² ΡΠ°ΠΉΠ»Π°Ρ
*.jsb
Π² ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠ°. Π ΠΌΠΎΠΌΠ΅Π½Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ΅ΡΠ²Π΅Ρ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎ ΡΠΊΠ°Π½ΠΈΡΡΠ΅Ρ ΠΏΠ°ΠΏΠΊΡ Ρ Π±ΠΈΠ½Π°ΠΌΠΈ ΠΈ Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ ΠΈΡ
Π² ΡΠ²ΠΎΠΉ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ, ΡΠ°ΠΊ ΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° Π±ΠΈΠ½ΠΎΠ².
ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ°ΠΉΠ» *.jsb
ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΡ Π±ΠΈΠ½Π° Π±Π΅Π· ΡΡΠ½ΠΊΡΠΈΠΈ JSB(...)
, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
Π€Π°ΠΉΠ» test.jsb
:
{
$name: 'MyBean',
myField: 123,
myMethod: function(){
return this.myField;
}
}
ΠΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π±ΠΈΠ½ΠΎΠ²
ΠΠ»ΡΡΠ΅Π²ΡΡ ΡΠΎΠ»Ρ Π² jsBeans ΠΈΠ³ΡΠ°Π΅Ρ JSB-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° ΠΆΠΈΠ·Π½Π΅Π½Π½ΡΠΉ ΡΠΈΠΊΠ» Π±ΠΈΠ½ΠΎΠ², ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠ³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΈ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎΠ»Π΅ΠΉ Ρ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² Π±ΠΈΠ½ΠΎΠ² Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠΉ ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Π°Ρ .
ΠΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅
ΠΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠ΅ Π±ΠΈΠ½Ρ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΠΊΡΠΈΠΉ (Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ β $server
ΠΈ $client
).
- Π ΡΠ΅ΠΊΡΠΈΠΈ
$client
, Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ, ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ ΠΏΠΎΠ»Ρ ΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ Π΄Π»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ DOM ΠΌΠΎΠ΄Π΅Π»ΡΡ Π±ΡΠ°ΡΠ·Π΅ΡΠ°. - Π ΡΠ΅ΠΊΡΠΈΠΈ
$server
β ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠ΅ ΠΏΠΎΠ»Ρ ΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΠΎΡΠ²Π΅ΡΠ°ΡΡΠΈΠ΅ Π·Π° Π±ΠΈΠ·Π½Π΅Ρ Π»ΠΎΠ³ΠΈΠΊΡ, ΡΠ°Π±ΠΎΡΡ Ρ Π‘Π£ΠΠ, ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ ΠΈ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠ΅ΡΡΡΡΠ°ΠΌΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ.
Π ΠΎΠ±ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° Π±ΠΈΠ½Π° Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ Π΅ΠΌΡ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅, Ρ Π°ΡΠ°ΠΊΡΠ΅Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ (ΠΎΠ΄ΠΈΠ½ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡ / ΠΌΠ½ΠΎΠ³ΠΎ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡ) Π·Π°Π΄Π°Π΅ΡΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠΌ ΠΏΡΠΈ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠΈ Π±ΠΈΠ½Π°.
ΠΠ·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΠ΄ΠΎΠΌ ΠΈΠ· ΡΠ°Π·Π½ΡΡ ΡΠ΅ΠΊΡΠΈΠΉ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°, ΠΏΡΡΠ΅ΠΌ Π²ΡΠ·ΠΎΠ²Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌΡΡ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΡ proxy-ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ².
Π€Π°ΠΉΠ» foo.jsb
:
{
/** ΠΏΠ°ΠΊΠ΅Ρ ΠΈ ΠΈΠΌΡ Π±ΠΈΠ½Π° */
$name: 'my.examples.Foo',
/** Π±ΠΈΠ½ ΠΌΠΎΠΆΠ΅Ρ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ */
$parent: 'my.examples.FooParent',
/** Π±ΠΈΠ½ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ Π±ΠΈΠ½Ρ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ²),
ΡΡΡΠ»ΠΊΠΈ Π½Π° ΠΊΠ»Π°ΡΡΡ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ
Π±ΠΈΠ½ΠΎΠ² Π±ΡΠ΄ΡΡ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°Π½Ρ Π² ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΊΠ°ΠΊ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠ΅ΡΠ΅Π· Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅*/
$require: {MyWorld: 'my.examples.MyWorld'},
/** ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈΠ· ΠΎΠ±ΡΠ΅ΠΉ ΡΠ΅ΠΊΡΠΈΠΈ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ (ΠΊΠΎΠΏΠΈΡΡΡΡΡΡ) Π² $client ΠΈ $server*/
formatMessageText: function(data){
var text = '';
for (let p in data) if (data.hasOwnProperty(p)) {
text += p + ' = ' + data[p] + '\n';
}
return text;
},
/** ΡΠ΅ΠΊΡΠΈΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° (ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅, Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ Web ΡΡΡΠ°Π½ΠΈΡΡ)*/
$client: {
$constructor: function(){
this.scheduleTimestampMessage();
},
scheduleTimestampMessage: function(){
window.setInterval(function(){
/** Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΡΠΉ Π²ΡΠ·ΠΎΠ² ΠΌΠ΅ΡΠΎΠ΄Π° ΠΈΠ· "ΠΏΡΠΎΡΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΠΉ ΡΠ΅ΠΊΡΠΈΠΈ" ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ
ΡΠ΅ΡΠ΅Π· Π°Π΄Π°ΠΏΡΠ΅Ρ, ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌΡΠΉ ΠΏΡΡΠ΅ΠΌ Π²ΡΠ·ΠΎΠ²Π° ΠΌΠ΅ΡΠΎΠ΄Π° remote() Ρ Π±ΠΈΠ½Π°.
*/
$this.remote().getTimestamp(function(result, error){ /** ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠ·ΠΎΠ²Π° ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° Π±ΡΠ΄Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ Π² ΠΊΠΎΠ»Π»Π±ΡΠΊ */
/** Π΄Π»Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²Π° Π² scope Π²ΡΠ΅Ρ
ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ
Π»ΠΎΠΊΠ°Π»ΡΠ½Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ $this ΡΠ°Π²Π½Π°Ρ this ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΠΌΠ΅ΡΠΎΠ΄Π° Π±ΠΈΠ½Π°
(ΠΈΠ·Π±Π°Π²Π»ΡΠ΅Ρ ΠΎΡ `var self = this`) */
if (!error) {
var data = {timestamp: result};
alert($this.formatMessageText(data));
}
});
}, 1000);
}
},
/** ΡΠ΅ΠΊΡΠΈΡ ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° (ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅)*/
$server: {
/** Π ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠΉ ΡΠ΅ΠΊΡΠΈΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΠΈΠΌΠΏΠΎΡΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Java*/
$require: {System: 'java:java.lang.System'},
/** Π‘Π΅ΡΠ²Π΅ΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΏΡΠΈ ΠΏΠΎΡΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠΉ ΡΠ°ΡΡΠΈ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° Π±ΠΈΠ½Π° */
$constructor: function(){
/** ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π±ΠΈΠ½Π°, ΡΠΌ `$require` */
this.myWorld = new MyWorld();
},
/** ΠΌΠ΅ΡΠΎΠ΄Ρ, ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΠ΅ Π² ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠΉ ΡΠ΅ΠΊΡΠΈΠΈ ΠΌΠΎΠ³ΡΡ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ */
getTimestamp: function (){
return 0 + this.getSystemTimestamp(); // '0 + ' - Java Int -> JS integer
},
getSystemTimestamp: function() {
/** ΠΡΠ·ΡΠ²Π°Π΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° Java ΠΈΠ· ΠΏΠ°ΠΊΠ΅ΡΠ° java.lang.System Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ
ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ */
return System.currentTimeMillis();
}
}
}
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ web ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ²
Web ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ
Π€Π°ΠΉΠ» myWebControl.jsb
:
{
$name: 'my.examples.MyWebControl',
/** Π£Π½Π°ΡΠ»Π΅Π΄ΡΠ΅ΠΌ Π½Π°Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΎΡ Π±ΠΈΠ½Π° Control ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ JSB.Widgets */
$parent: 'JSB.Widgets.Control',
/** ΠΠ°Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ComboBox ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ JSB.Widgets */
$require: ['JSB.Widgets.ComboBox'],
/** ΠΠ»ΠΈΠ΅Π½ΡΡΠΊΠ°Ρ ΡΠ΅ΠΊΡΠΈΡ (ΠΊΠΎΠ΄ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅) */
$client: {
$constructor: function(opts){
$base(opts); // ΠΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ
/** ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΡΡΠΈΠ»ΠΈ (ΠΏΡΡΡ Π·Π°Π΄Π°Π΅ΡΡΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΌΠ΅ΡΡΠ° ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
ΡΠ°ΠΉΠ»Π° Ρ ΡΠ΅ΠΊΡΡΠΈΠΌ Π±ΠΈΠ½ΠΎΠΌ) */
$jsb.loadCss('myWebControl.css');
/** Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ Π±ΠΈΠ½Π° ComboBox ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ JSB.Widgets */
var cb = new ComboBox({
cssClass: 'myCombo',
dropDown: true,
items: [{
key: 'first',
element: 'ΠΠ΅ΡΠ²ΡΠΉ'
},{
key: 'second',
element: 'ΠΡΠΎΡΠΎΠΉ'
},{
key: 'third',
element: '<div class="cool">Π’ΡΠ΅ΡΠΈΠΉ</div>'
}],
/* ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΠΊΠΎΠΌΠ±ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ, ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠΌ ΡΠ΅ΡΠ΅Π· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ
ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° */
value: opts.initialValue,
onChange: function(key, obj){
$this.updateMyData();
}
});
/** ΠΠΎΠ±Π°Π²ΠΈΠΌ ComboBox Π² DOM ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π½Π°ΡΠ΅Π³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° */
this.append(cb);
/** Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ DOM ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π΄Π»Ρ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠ΄Π° Π΄Π°Π½Π½ΡΡ
Ρ ΡΠ΅ΡΠ²Π΅ΡΠ° */
this.append($('<div class="myContainer"></div>'));
/** ΠΠ°Π³ΡΡΠ·ΠΈΠΌ/ΠΎΠ±Π½ΠΎΠ²ΠΈΠΌ Π΄Π°Π½Π½ΡΠ΅ Ρ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΈ Π²ΡΠ²Π΅Π΄Π΅ΠΌ ΠΈΡ
*/
this.updateMyData();
},
updateMyData: function(){
/** ΠΠΎΠ»ΡΡΠΈΠΌ ΡΠ΅ΠΊΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΠΊΠΎΠΌΠ±ΠΎ-Π±ΠΎΠΊΡΠ° */
var cbVal = this.find('.myCombo').jsb().getData();
/** ΠΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ
Ρ ΡΠ΅ΡΠ²Π΅ΡΠ°.
ΠΠ΅ΡΠ²ΡΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΠΊΠΎΠΌΠ±ΠΎ, Π° Π²ΡΠΎΡΡΠΌ - ΠΊΠΎΠ»Π±ΡΠΊ
ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ Π²ΡΠ·Π²Π°Π½Π° ΡΡΠ°Π·Ρ ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄
Π²Π΅ΡΠ½Π΅Ρ Π΄Π°Π½Π½ΡΠ΅ */
this.server().loadMyData(cbVal, function(res){
$this.drawData(res); // ΠΎΡΡΠΈΡΡΠ΅ΠΌ Π΄Π°Π½Π½ΡΠ΅
});
/** ΠΠ»Ρ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ
ΡΡΠ½ΠΊΡΠΈΡ remote(), ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ ΡΠ΄Π°Π»Π΅Π½Π½ΡΠΉ Π²ΡΠ·ΠΎΠ² Π½Π°
ΠΏΡΠΎΡΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Π΅. ΠΠΎ Π΅ΡΠ»ΠΈ ΠΌΡ Π·Π½Π°Π΅ΠΌ, ΡΡΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄
Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΈ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΡ
ΡΡΠ½ΠΊΡΠΈΡ, ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²Π½ΠΎ ΡΡΠ°Π·Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ server().
ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½Π° ΠΈ ΠΎΠ±ΡΠ°ΡΠ½Π°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ - Π½Π°Ρ
ΠΎΠ΄ΡΡΡ Π² ΡΠ΅Π»Π΅ ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°
ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎ Π²ΡΠ·Π²Π°ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄, ΠΏΡΡΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ
ΡΡΠ½ΠΊΡΠΈΠΈ client()*/
},
drawData: function(data){
/** ΠΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΡΠΈΡΡΠΈΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ */
$('.myContainer').empty(); // Π²ΡΠ·ΠΎΠ² jQuery
/** ΠΠΎΠ±Π°Π²ΠΈΠΌ Π΄Π°Π½Π½ΡΠ΅ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ³ΠΎ
ΡΠ°Π±Π»ΠΎΠ½ΠΈΠ·Π°ΡΠΎΡΠ° doT */
$('.myContainer').append(`#dot
<ul class="myTags">
{{ for(var i in data) { }}
<li class="myTag">{{=data[i]}}</li>
{{ } }}
</ul>
`);
}
},
/** Π‘Π΅ΡΠ²Π΅ΡΠ½Π°Ρ ΡΠ΅ΠΊΡΠΈΡ (ΠΊΠΎΠ΄ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΡΠ΅ΡΠ²Π΅ΡΠ°) */
$server: {
myDictionary: {
first: ['ΠΠ½Π½Π°', 'ΠΠ°ΡΠΈΡ'],
second: ['ΠΠ΅ΡΠ°', 'ΠΠ°ΡΠΈΡΠ°'],
third: ['ΠΠ΅ΡΠΎΠ½ΠΈΠΊΠ°','ΠΠ΅ΡΡ']
},
loadMyData: function(key){
return this.myDictionary[key];
}
}
}
ΠΡΡΡΠ°ΠΈΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Π² HTML ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ JavaScript
<html>
<head>
<script type="text/javascript" src="jsbeans.jsb"></script>
</head>
<body>
<div id="myGlobalContainer"></div>
<script type="text/javascript">
JSB.create('my.examples.MyWebControl', {
container: '#myGlobalContainer',
initialValue: 'second'
}, function(myCtrl){
/** place code here if you want to do anything after control
has been created */
});
</script>
</body>
</html>
ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π²ΡΡΡΠ°ΠΈΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Π² HTML
<html>
<head>
<script type="text/javascript" src="jsbeans.jsb"></script>
</head>
<body>
<div id="myGlobalContainer"
jsb="my.examples.MyWebControl"
initialvalue="second"
></div>
</body>
</html>
Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ ΠΎΠ±ΡΠΈΡ ΠΏΠΎΠ»Π΅ΠΉ
ΠΠΎΠ»Ρ ΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΠ΅ Π² ΠΎΠ±ΡΠ΅ΠΉ ΡΠ΅ΠΊΡΠΈΠΈ Π±ΠΈΠ½Π° (Π²Π½Π΅ $server
ΠΈ $client
) ΡΠ²Π»ΡΡΡΡΡ ΠΎΠ±ΡΠΈΠΌΠΈ ΠΈ Π΄Π»Ρ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΈ Π΄Π»Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΈ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π² ΠΊΠΎΠ΄Π΅ ΠΎΠ±Π΅ΠΈΡ
ΡΠ΅ΠΊΡΠΈΠΉ. JsBeans ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠΈΠ΅ ΠΏΠΎΠ»Ρ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎ ΠΏΠΎΠ»Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΠΎΠ΅ ΠΊΠΎΠ΄ΠΎΠΌ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Π΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡΡ ΠΈ Π½Π° Π΄ΡΡΠ³ΠΎΠΉ.
ΠΠΎΠ»ΠΈΡΠΈΠΊΠ° ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΠ»Π΅ΠΉ Π³ΠΈΠ±ΠΊΠΎ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΡΡΡ ΠΎΠΏΡΠΈΠ΅ΠΉ $sync
, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ Π·Π°Π΄Π°Π²Π°ΡΡΡΡ Π² ΡΠ°Π·Π½ΡΡ
ΡΠ΅ΠΊΡΠΈΡΡ
Π±ΠΈΠ½Π°. Π‘ΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΠ΄Π½ΠΎΠ½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΠΎΠΉ ΠΈ Π΄Π²ΡΠ½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΠΎΠΉ, ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ, Π° ΠΌΠΎΠΆΠ΅Ρ ΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎ.
ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΎΠ΄Π½ΠΎΠ½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½Π°Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ
ΠΠ»Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΎΠ΄Π½ΠΎΠ½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΠΎΠΉ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π² ΠΎΠ±ΡΠ΅ΠΉ ΡΠ΅ΠΊΡΠΈΠΈ Π±ΠΈΠ½Π° ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΎΠΏΡΠΈΡ $sync: true
. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΡΠ΅ ΠΎΠ±ΡΠΈΠ΅ ΠΏΠΎΠ»Ρ, ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠ΅ ΠΊΠΎΠ΄ΠΎΠΌ Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΡΠ΅ΡΠ²Π΅ΡΠ°, Π±ΡΠ΄ΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ ΠΈ Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, Π½ΠΎ Π½Π΅ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ.
{
$name: 'my.examples.MySyncBean',
$sync: true,
/** ΠΠ±ΡΠ΅Π΅ ΠΏΠΎΠ»Π΅, ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°ΡΠ΅Π΅ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ */
myCommonField: 'starting...',
$client: {
$constructor: function(){
console.log(this.myCommonField);
},
/** ΠΠ΅ΡΠΎΠ΄ $onSyncAfter Π±ΡΠ΄Π΅Ρ Π²ΡΠ·Π²Π°Π½ ΡΡΠ°Π·Ρ ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ
ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·ΠΈΡΡΠ΅ΠΌΡΡ
ΠΏΠΎΠ»Π΅ΠΉ Π±ΡΠ΄ΡΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ */
$onSyncAfter: function(syncInfo){
console.log(this.myCommonField);
}
},
$server: {
$constructor: function(){
/** ΠΡΠ΄Π΅ΠΌ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ ΠΏΠΎΠ»Π΅ Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΊΠ°ΠΆΠ΄ΡΡ ΠΌΠΈΠ½ΡΡΡ */
JSB.interval(function(){
$this.myCommonField = new Date().toString();
}, 60000);
}
}
}
ΠΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° Π±ΠΈΠ½Π° Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Π΅ Π±ΡΠ΄Π΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΠ·Π΄Π°Π½Π° Π΅Π³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ½Π°Ρ ΡΠ°ΡΡΡ ΠΈ Π²ΡΠ·ΠΎΠ²Π΅ΡΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ. ΠΠ°Π»Π΅Π΅ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ JSB.interval
, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π» ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΏΠΎΠ»Ρ Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΡΠ΅ΡΠ²Π΅ΡΠ° Π² ΠΎΠ΄Π½Ρ ΠΌΠΈΠ½ΡΡΡ. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅, Π² ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΊΠ°ΠΆΠ΄ΡΡ ΠΌΠΈΠ½ΡΡΡ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ°ΡΠ°ΡΡΡΡ ΡΠ΅ΠΊΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ.
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ
ΠΠΏΡΠΈΡ $sync:true
ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΡ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½Π° ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅:
$sync: {
updateClient: true,
updateServer: false,
updateCheckInterval: 1000,
include: [],
exclude: []
}
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π΄Π»Ρ updateClient
ΠΈ updateServer
ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π·Π°Π΄Π°ΡΡ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ, ΠΏΡΠΈ ΡΡΠΎΠΌ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎΠ½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΠΎΠΉ, ΡΠ°ΠΊ ΠΈ Π΄Π²ΡΠ½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΠΎΠΉ (ΠΎΠ±Π° Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ Π² true
).
ΠΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΎΠΏΡΠΈΠΉ include
ΠΈ exclude
ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΠΈΠΌΠ΅Π½Π° ΠΏΠΎΠ»Π΅ΠΉ, ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°ΡΠΈΡ
ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ.
ΠΠΏΡΠΈΡ updateCheckInterval
ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π» ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΏΠΎΠ»Π΅ΠΉ Π½Π° Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΠΈΡ
ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ. ΠΠ°Π΄ΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π² ΡΠ»ΡΡΠ°Π΅ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·ΠΈΡΡΠ΅ΠΌΡΡ
ΠΏΠΎΠ»Π΅ΠΉ, Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ Π½Π΅Π³Π°ΡΠΈΠ²Π½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ. Π ΡΠ°ΠΊΠΈΡ
ΡΠ»ΡΡΠ°ΡΡ
ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΈ ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΠΎ Π² ΡΠ΅Ρ
ΠΌΠ΅ΡΡΠ°Ρ
, Π³Π΄Π΅ ΡΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΡΡ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½ΡΠΆΠ½ΠΎ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ, ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ² ΠΎΠΏΡΠΈΡ updateCheckInterval: 0
ΠΈ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΡΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎ, ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Π²ΡΠ·ΠΎΠ²Π° ΠΌΠ΅ΡΠΎΠ΄Π° doSync
, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠΌΠ΅Π΅ΡΡΡ Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π±ΠΈΠ½Π°.
{
$name: 'my.examples.MySyncBean2',
$sync: {
updateCheckInterval: 0 // ΠΎΡΠΊΠ»ΡΡΠΈΠΌ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ
},
/** ΠΠ±ΡΠ΅Π΅ ΠΏΠΎΠ»Π΅, ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°ΡΠ΅Π΅ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ */
myCommonField: 'starting...',
$client: {
$constructor: function(){
console.log(this.myCommonField);
},
/** ΠΠ΅ΡΠΎΠ΄ onAfterSync Π±ΡΠ΄Π΅Ρ Π²ΡΠ·Π²Π°Π½ ΡΡΠ°Π·Ρ ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ
ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·ΠΈΡΡΠ΅ΠΌΡΡ
ΠΏΠΎΠ»Π΅ΠΉ Π±ΡΠ΄ΡΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ */
onAfterSync: function(syncInfo){
console.log(this.myCommonField);
}
},
$server: {
$constructor: function(){
/** ΠΡΠ΄Π΅ΠΌ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ ΠΏΠΎΠ»Π΅ Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΊΠ°ΠΆΠ΄ΡΡ ΠΌΠΈΠ½ΡΡΡ */
JSB.interval(function(){
$this.myCommonField = new Date().toString();
/** ΠΡΠ·ΠΎΠ²Π΅ΠΌ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎ*/
$this.doSync();
}, 60000);
}
}
}
Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ
ΠΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΎΠ±ΡΠΈΡ
ΠΏΠΎΠ»Π΅ΠΉ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Π΅, jsBeans
ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°Π΅Ρ ΡΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΈ ΡΠΎΡΠΌΠΈΡΡΠ΅Ρ ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΉ ΡΠΈΠ½Ρ
ΡΠΎΠΏΠ°ΠΊΠ΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π½Π° Π΄ΡΡΠ³ΡΡ ΡΡΠΎΡΠΎΠ½Ρ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΏΠΎΠ»Π΅ΠΉ. ΠΠ΅ΡΠ΅Π΄ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΡΠΌ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ, ΡΠΈΠ½Ρ
ΡΠΎΠΏΠ°ΠΊΠ΅Ρ ΠΏΡΠΎΡ
ΠΎΠ΄ΠΈΡ ΡΠ΅ΡΠ΅Π· ΠΌΠ΅ΡΠΎΠ΄ onBeforeSync
, ΠΊΠΎΡΠΎΡΡΠΉ Π΅ΡΡΡ Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π±ΠΈΠ½Π°. ΠΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ ΠΏΠΎΠ»Π΅ΠΉ, ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π² ΡΠΈΠ½Ρ
ΡΠΎΠΏΠ°ΠΊΠ΅Ρ.
{
$name: 'my.examples.SyncBeforeAfterTest'
myField1: 'test',
myField2: {},
$client: {
// ...
/** onBeforeSync Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΈΠ½Ρ
ΡΠΎΠΏΠ°ΠΊΠ΅ΡΠ°,
Π½ΠΎ ΠΏΠ΅ΡΠ΅Π΄ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ»Π΅ΠΉ.
ΠΠ΄Π΅ΡΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΈΠ½ΡΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ - ΡΡΠΎΠΈΡ Π»ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΡΠΈΠ½Ρ
ΡΠΎΠΏΠ°ΠΊΠ΅Ρ ΠΈΠ»ΠΈ Π½Π΅Ρ */
onBeforeSync: function(syncInfo){
if(syncInfo.isChanged('myField1')) {
return false; // Π½Π΅ Π±ΡΠ΄Π΅ΠΌ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ
}
return true; // ΠΏΡΠΈΠΌΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ
}
// ...
}
}
ΠΠΎΡΠ»Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΏΠΎΠ»Π΅ΠΉ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄ onAfterSync
Π² ΡΠ΅Π»ΡΡ
ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ ΠΎ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½Π½ΠΎΠΉ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ.
{
$name: 'my.examples.SyncBeforeAfterTest2'
myField1: 'test',
myField2: {},
$client: {
// ...
/** onAfterSync Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ.
ΠΠ΄Π΅ΡΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΡΠ·Π½Π°Π², ΡΡΠΎ ΠΏΠΎΠ»Π΅ ΠΎΠ±Π½ΠΎΠ²ΠΈΠ»ΠΎΡΡ*/
onAfterSync: function(syncInfo){
if(syncInfo.isChanged('myField1')) {
console.log('Π£ΡΠ°, ΡΠ΅ΠΏΠ΅ΡΡ myField1 = ' + $this.myField1);
}
}
// ...
}
}
ΠΠ±ΠΌΠ΅Π½ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ
- TODO
Π ΡΡΠΎΠ²ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Π² ΡΠ΅ΡΡΠΈΠΎΠ½Π½ΡΡ Π±ΠΈΠ½Π°Ρ - $root
ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ $singleton ΠΈ $fixedId
- TODO
ΠΡΠΈΠ²ΡΠ·ΠΊΠ° ΠΊ ΡΠ΅ΠΊΡΡΠ΅ΠΌΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΡ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΠΈΠ· ΡΡΠΆΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² - JSB.wrap()
- TODO
Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΆΠΈΠ·Π½Π΅Π½Π½ΡΠΌ ΡΠΈΠΊΠ»ΠΎΠΌ
ΠΠΈΠ½ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎΡΡΠ°Π²Π½ΡΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ, ΡΠ°Π·Π½ΡΠ΅ Π΅Π³ΠΎ ΡΠ°ΡΡΠΈ (ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠ°Ρ ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ½Π°Ρ) ΠΈΠΌΠ΅ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ JavaScript ΠΎΠ±ΡΠ΅ΠΊΡΡ, Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ²ΠΎΠΉ ΠΆΠΈΠ·Π½Π΅Π½Π½ΡΠΉ ΡΠΈΠΊΠ» ΠΈ ΠΎΠ±Π»Π°ΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ. Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²ΡΠ·Π°ΡΡ ΠΆΠΈΠ·Π½Π΅Π½Π½ΡΠΉ ΡΠΈΠΊΠ» Π±ΠΈΠ½Π° ΠΊ ΡΠ΅ΡΠΈΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΡΠΏΡΠ°Π²Π»ΡΡΡ Π°Π²ΡΠΎΠΏΠΎΡΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² ΠΈΠ»ΠΈ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΆΠΈΠ·Π½Π΅Π½Π½ΡΠΌ ΡΠΈΠΊΠ»ΠΎΠΌ Π²ΡΡΡΠ½ΡΡ. ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΡΠ»ΡΡΠ°Π΅Π².
Π‘ΠΈΠ½Π³Π»ΡΠΎΠ½
- TODO
Π‘ΠΈΠ½Π³Π»ΡΠΎΠ½ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΡΠ΅ΡΡΠΈΠΈ
- TODO
ΠΠ²ΡΠΎΠΏΠΎΡΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠΉ ΡΠ°ΡΡΠΈ Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°
- TODO
ΠΠ΄ΠΈΠ½ Π±ΠΈΠ½: ΠΎΠ΄ΠΈΠ½ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠΉ - ΠΎΠ΄ΠΈΠ½ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠΉ
- TODO
ΠΠ΄ΠΈΠ½ Π±ΠΈΠ½: ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΡ - ΠΎΠ΄ΠΈΠ½ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠΉ
- TODO
ΠΠ΄ΠΈΠ½ Π±ΠΈΠ½: ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΡ - ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΡ
- TODO
.