ForgeTotal.js 5
el

Total.js 5

Συγκεντρώστε και εκτελέστε ένα αρχικό στοιχείο διακομιστή

Total.js 5 · total5@0.0.19 total5reference Εκτελέστηκε με το Total.js 5

Το NEWCOMPONENT(html, [callback]) μεταγλωττίζει ένα στοιχείο διακομιστή, διαφορετικό από ένα jComponent του προγράμματος περιήγησης. Δέχεται πηγαίο κείμενο που περιέχει script total ή script node· χωρίς callback επιστρέφει promise. Ένα όνομα φορτώνει το components/name.html· ένα URL κατεβάζει την πηγή. Αυτή η συνταγή χρησιμοποιεί μόνο αξιόπιστο inline κώδικα, χωρίς απομακρυσμένη πηγή ή δηλώσεις npm.

Το εξαγόμενο στοιχείο παρέχει μεταδεδομένα, προεπιλογές για το config και make(instance,config). Το component.create(overrides) δημιουργεί μια παρουσία με κλωνοποιημένες προεπιλογές. Δηλώστε inputs:[{id,schema}] για τον μετασχηματισμό της εισόδου. Το instance.input(inputId,data,callback) παραδίδει ένα μήνυμα του οποίου τα .data και .error αντικατοπτρίζουν την επικύρωση του σχήματος. Ο χειριστής εκτελείται παρ᾽ όλα αυτά με μη έγκυρη είσοδο, γι᾽ αυτό ελέγξτε το message.error πριν την επεξεργασία. Το message.send(outputId,data) εκπέμπει μια έξοδο· το message.destroy() τη τερματίζει.

instance.reconfigure(values) ενημερώνει τη διαμόρφωσή του και καλεί τις ρυθμίσεις / αποθήκευση. instance.remove() καλεί κύκλους ζωής και αφαιρεί την περίπτωση. component.remove() Απομακρύνει όλες τις παραδείξεις και καλείται να απενεργοποιηθεί. τα συστατικά εκτελούνται με τα προνόμια της εφαρμογής και δεν είναι ένα sandbox.

controllers/components.js
exports.install = function() {
	ROUTE('GET /native-component/', exercise);
};
async function exercise($) {
	try {
		var source = '<script total>exports.id="native-echo";exports.name="Native echo";exports.config={prefix:"one:"};exports.inputs=[{id:"input",schema:"*name:String"}];exports.make=function(instance,config){instance.message=function($){if($.error){$.send("invalid",{invalid:true});$.destroy();return;}$.send("output",{text:config.prefix+$.data.name});$.destroy();};instance.destroy=function(){MAIN.componentClosed=true;};};</script>';
		var component = await NEWCOMPONENT(source);
		component.debugger = false;
		var instance = component.create();
		var first = await new Promise(resolve => instance.input('input',{name:'Ann'},message => resolve(message.data)));
		var invalid = await new Promise(resolve => instance.input('input',{},message => resolve(message.data)));
		instance.reconfigure({prefix:'two:'});
		var second = await new Promise(resolve => instance.input('input',{name:'Bob'},message => resolve(message.data)));
		instance.remove();
		var rejected = false;
		try { await NEWCOMPONENT('<body>no backend script</body>'); } catch (e) { rejected = true; }
		$.json({first:first,invalid:invalid,second:second,remaining:component.instances.length,closed:MAIN.componentClosed,rejected:rejected});
	} catch (e) { $.invalid(e); }
}