ForgejComponent
bg

jComponent

Намиране и извикване на компоненти и плъгини: FIND, COMPONENTS, SETTER, EXE, TAPI, MIDDLEWARE и ADAPT

jComponent 20 · jcomponent@20 jcomponentfrontendcomponentsapi Изпълнено с jComponent 20
  • 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' за всички). Име, което още не е заредено, се зарежда първо (мързелив компонент). ASETTER(...) не го извиква: връща функция, която ще го направи.
  • EXE(name, a, b, c, d) (същото като EXEC()) извиква това, което казва името: 'plugin/method' метод на плъгин, '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, когато страницата започне отново.
definitions/math.js
NEWACTION('Math/add', {
	name: 'Add two numbers',
	input: '*a:Number, *b:Number',
	action: function($, model) {
		$.callback({ sum: model.a + model.b });
	}
});
controllers/api.js
exports.install = function() {
	ROUTE('API /api/ +math_add --> Math/add');
	ROUTE('API /pipe/ +math_add --> Math/add');
};
public/index.html
<!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>
Опитайте в браузъра си

Редактирайте примера и го изпълнете. Работи в изолирана рамка във вашия браузър; нищо не се изпраща към нашия сървър.

Преглед