Εύρεση και κλήση στοιχείων και plugins: FIND, COMPONENTS, SETTER, EXE, TAPI, MIDDLEWARE και ADAPT
- Το
FIND(selector, [all])επιστρέφει ένα στοιχείο που είναι έτοιμο: το'notice'είναι το όνομά του, το'.msg'η διαδρομή του (ταιριάζει με τις διαδρομές που το περιέχουν) και το'#id'το id του· με τοallστοtrueεπιστρέφει τη λίστα. ΤοCOMPONENTS(path)επιστρέφει τη λίστα των έτοιμων στοιχείων των οποίων η διαδρομή είναι κάτω από τοpath· οι σημαίες μιας διαδρομής τη φιλτράρουν ('msg @visible'). - Το
SETTER('name/method', a, b, c, d)καλεί τοmethodκάθε έτοιμου στοιχείου με αυτό το όνομα ('.path/method'για διαδρομή,'#id/method'για id,'*/method'για όλα). Ένα όνομα που δεν έχει φορτωθεί ακόμη φορτώνεται πρώτα (ένα lazy στοιχείο). ΤοASETTER(...)δεν το καλεί: επιστρέφει μια συνάρτηση που θα το κάνει. - Το
EXE(name, a, b, c, d)(το ίδιο με τοEXEC()) καλεί ό,τι λέει το όνομα:'plugin/method'μια μέθοδο ενός plugin,'function'μια καθολική συνάρτηση ή μια διαδρομή στην κατάσταση που κρατά μια συνάρτηση ('FUNC.save'). ΤοSEEX(name, value)είναι το ίδιο, αλλά όταν το όνομα δεν είναι συνάρτηση ορίζει τη διαδρομή σεvalue. - Το
TAPI(name, data, callback)είναιAPI(DEF.api, ...)και τοPIPE(name, data, callback)είναιAPI(DEF.pipe, ...): δύο διευθύνσεις endpoints που ορίζετε μία φορά σταDEF.apiκαιDEF.pipe. - Το
MIDDLEWARE(name, function(next) {})καταχωρίζει μια συνάρτηση που εκτελείται πριν από μια διαδρομή: πρέπει να καλέσει τοnext()για να την αφήσει να συνεχίσει. Μια διαδρομή ζητά ένα (ή περισσότερα, χωρισμένα με κόμματα) ως τρίτο όρισμα:ROUTE('/path/', handler, 'name'). ΤοMIDDLEWARE(['a', 'b'], callback)εκτελεί τα middleware με τη σειρά και μετά το callback· ένα που δεν καλεί τοnext()σταματά την αλυσίδα. - Το
NEWUIBIND(element, path, config)δημιουργεί έναui-bindσε ένα στοιχείο από τον κώδικα (το στοιχείο δεν χρειάζεται τα χαρακτηριστικά) και το επιστρέφει. - Το
ADAPT(path, id, text)προετοιμάζει το κείμενο ενός στοιχείου που έρχεται απ᾽ έξω: μεταφράζει τα@(...), αντικαθιστά τα~PATH~καιCLASSμε τη διαδρομή και το~ID~με το id, και βάζει τοpathστις ετικέτες<ui-plugin>που δεν έχουν. ΤοCOMPILEείναι η ίδια συνάρτηση με τοNOOPστο jComponent 20: δεν κάνει τίποτα. - Τα αντικείμενα πίσω από τα πάντα: τα
jComponent,Total,MAINκαιMείναι το ίδιο αντικείμενο (η μηχανή: τοM.componentsείναι η λίστα των στοιχείων, τοM.versionη έκδοση), τοWείναι τοwindow, τοDEFοι προεπιλογές, και ταREPO,FUNC,TEMPκαιPLUGINSείναι απλά δικά σας αντικείμενα: τοFUNCγια συναρτήσεις που μπορεί να καλέσει τοEXE('FUNC.name'), τοTEMPαδειάζει το jComponent όταν η σελίδα ξεκινά ξανά.
NEWACTION('Math/add', {
name: 'Add two numbers',
input: '*a:Number, *b:Number',
action: function($, model) {
$.callback({ sum: model.a + model.b });
}
});exports.install = function() {
ROUTE('API /api/ +math_add --> Math/add');
ROUTE('API /pipe/ +math_add --> Math/add');
};<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>jComponent</title>
<link rel="stylesheet" href="//cdn.componentator.com/spa.min@20.css" />
<script src="//cdn.componentator.com/spa.min@20.js"></script>
</head>
<body>
<ui-component name="notice" path="msg"></ui-component>
<ui-component name="notice" path="other"></ui-component>
<ui-plugin path="shop"></ui-plugin>
<p id="target">x</p>
<script>
COMPONENT('notice', function(self) {
self.make = function() { self.element.html('<b></b>'); };
self.say = function(text, extra) { self.find('b').text(text + (extra || '')); };
});
PLUGIN('shop', function(exports) {
exports.hello = function(a) { window.shoplog = 'hello ' + a; };
});
window.globalfn = function(a, b) { window.globallog = [a, b]; };
FUNC.local = function(a) { window.funclog = a; };
DEF.api = '/api/';
DEF.pipe = '/pipe/';
</script>
</body>
</html> Δοκιμάστε το στον browser σας
Επεξεργαστείτε το παράδειγμα και εκτελέστε το. Εκτελείται σε απομονωμένο πλαίσιο στον browser σας· τίποτα δεν στέλνεται στον διακομιστή μας.
Προεπισκόπηση