Docs
Everything You Need to Know
Components
Use
Setup
Components are just reusable views. As such, their setup is almost identical to views. The only difference is that for a component, you never, ever provide an element. All components are elementless at creation. The element for a component gets assigned after you create an instance.
// Define a component: $.Component({ name: 'PeopleComponent', variable: 'person', template: "<li class='comp'>\ <img data-src='{= person.image }' alt='{= $.view.index }: {= person.firstName } {= person.lastName }'>\ <div>\ <h3>\ {= person.firstName } {= person.lastName }\ </h3>\ </div>\ </li>", events: [ { event: 'tap', element: 'li', callback: function() { console.log($(this).text()); } } ] });
The above gives a component named "MyWidget" that we can use to create exact copies of the original component. The component will be registered on the dollar sign ($):
// Create an instance of $.MyWidget: var Widget1 = $.Widget();
After creating an instance of our component, we need to tell it what element it is associated with:
// Create an instance of $.MyWidget: var Widget1 = $.Widget(); // Tell the component what element to use: Widget1.setElement('#myWidget1);
Now that the component has an element, we can render it will data:
// Create an instance of $.MyWidget: var Widget1 = $.Widget(); // Tell the component what element to use: Widget1.setElement('#myWidget1'); // Render the component with data: Widget1.render(widgetData);
Below is a complete example of defining and use a component:
// Array data: //============= var lums = [ {firstName: "Stephen", lastName: "Hawking", image: 'images/Hawking.jpg'}, {firstName: "Albert", lastName: "Einstein", image: 'images/Einstein.jpg'}, {firstName: "Leonardo", lastName: "Da Vinci", image: 'images/DaVinci.jpg'}, {firstName: "Galileo", lastName: "Galilei", image: 'images/Galileo.jpg'}, {firstName: "Nicholas", lastName: "Copernicus", image: 'images/Copernicus.jpg'} ]; var bums = [ {firstName: 'Joe', lastName: 'Bodoni', image: 'images/apple.png'}, {firstName: 'Wobba', lastName: 'Bango', image: 'images/orange.png'}, {firstName: 'Jeff', lastName: 'Ruther', image: 'images/banana.png'}, {firstName: 'Pete', lastName: 'Smith', image: 'images/avocado.png'} ]; // Define component "people": $.Component({ name: 'People', variable: 'person', // Get if a start number: startIndexFrom: 7, template: "<li class='comp'>\ <img data-src='{= person.image }' alt=''>\ <div>\ <h3>\ {= $.view.index }: {= person.firstName } {= person.lastName }\ </h3>\ </div>\ </li>", events: [ { event: 'tap', element: 'li', callback: function() { console.log($(this).text()) } } ] }); // Define a component instance: var LumsView = $.People(); LumsView.setElement('#arrayTemplate1'); LumsView.render(lums); // Define another component instance: var BumsView = $.People(); BumsView.setElement('#arrayTemplate2'); BumsView.render(bums); // Markup for components: <ul class="list" id="arrayTemplate1"></ul> <ul class="list" id="arrayTemplate2"></ul>
See the live example: Components.