Code aanroepen met commando's en EXEC
Twee manieren om code te activeren zonder directe verwijzing naar het object dat hem bezit:
- Een component registreert een commando met
self.command(name, fn), en de code die de component-instantie vasthoudt, voert het uit metinstance.CMD(name, a, b, c)(element[0].$uicomponentis de instantie van eenui-component). Gebruik het voor acties als "open dit venster" of "ververs die lijst". De globaleCMD(name)is bedoeld om elke component te bereiken, maar in jComponent 20.014 knipt hij een naam zonder spatie af en doet daarom niets: gebruik de instantie ofEXEC(). EXEC('plugin/method', a, b)roept de methodemethodaan van de plugin die op het padpluginleeft; een gewone functienaam (EXEC('myfunction')) roept een globale functie aan. Het commandoexecvanui-binden de optieexecvan veel componenten accepteren dezelfde namen.
<!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-plugin path="cart">
<p>Items: <ui-bind path="?.count" config="text:value"></ui-bind></p>
</ui-plugin>
<ui-component name="notice" id="notice"></ui-component>
<script>
PLUGIN('cart', function(self) {
self.add = function(n) {
self.set('count', (self.get('count') || 0) + n);
};
self.make = function() {
self.set('count', 0);
};
});
COMPONENT('notice', function(self) {
self.make = function() {
self.html('<i class="text"></i>');
self.command('say', function(text) {
self.find('.text').text(text);
});
};
});
function logout(arg) {
window.loggedout = arg;
}
</script>
</body>
</html> Probeer het in je browser
Bewerk het voorbeeld en voer het uit. Het draait in een geïsoleerd frame in je browser; er wordt niets naar onze server gestuurd.
Voorbeeld