diff --git a/docs/client/api.html b/docs/client/api.html index 0b0630304e..be363b32d5 100644 --- a/docs/client/api.html +++ b/docs/client/api.html @@ -947,23 +947,83 @@ Example:

Templates

+A template that you declare as `<{{! }}template name="foo"> ... ` can be accessed as the function `Template.foo`, which +returns a string of HTML when called. + +The same template may occur many times on the page, and these +occurrences are called template instances. Template instances have a +life cycle of being created, put into the document, and later taken +out of the document and destroyed. Meteor manages these stages for +you, including determining when a template instance has been removed +or replaced and should be cleaned up. You can associate data with a +template instance, and you can access its DOM nodes when it is in the +document. + +Additionally, Meteor will maintain a template instance and its state +even if its surrounding HTML is re-rendered into new DOM nodes. As +long as the structure of template invocations is the same, Meteor will +not consider any instances to have been created or destroyed. You can +request that the same DOM nodes be retained as well using `preserve` +and `constant`. + +There are a number of callbacks and directives that you can specify on +a named template and that apply to all instances of the template. +They are described below. + {{> api_box tmpldecl}} -A template that you declare as `<{{! }}template name="foo"> ... ` -can be accessed as the function `Template.foo`. +When called inside a template helper, the body of `Meteor.render`, or +other settings where reactive HTML is being generated, the resulting +HTML is annotated so that it renders as reactive DOM elements. +Otherwise, the HTML is unadorned and static. -XXX Describe `data` arg, calling it to get HTML. Each template may have many -occurrences (/instances/invocations) on the page. There are callbacks and -directives you can specify on a template declaration that apply to all -instances of the template. Templates have a life cycle. There are template -instance objects. {{> api_box tmpldecl_rendered}} +This callback is called when an instance of Template.*myTemplate* is rendered into DOM nodes and put into the document for the first time, and again each time any part of the template is re-rendered. + +{{#note}} +Since there's no way to tell which part of the template changed on re-render, the first rendered() received after created() is by far the most useful. +{{/note}} + +In the body of the callback, `this` is a [template +instance](#template_inst) object that is unique to this occurrence of +the template and persists across re-renderings. Use the `created` and +`destroyed` callbacks to perform initialization or clean-up on the +object. + {{> api_box tmpldecl_created}} +This callback is called when an invocation of *myTemplate* represents +a new occurrence of the template and not a re-rendering of an existing +template instance. Inside the callback, `this` is the new [template +instance](#template_inst) object. Properties you set on this object +will be visible from the `rendered` and `destroyed` callbacks and from +event handlers. + +This callback fires once and is the first callback to fire. Every +`created` has a corresponding `destroyed`; that is, if you get a +`created` callback with a certain template instance object in `this`, +you will eventually get a `destroyed` callback for the same object. + {{> api_box tmpldecl_destroyed}} +This callback is called when an occurrence of a template is taken off +the page for any reason and not replaced with a re-rendering. Inside +the callback, `this` is the [template instance](#template_inst) object +being destroyed. + +This callback is most useful for cleaning up or undoing any external +effects of `created`. It fires once and is the last callback to fire. + +

Template instances

+ + + +* XXX methods +* Where available from (callbacks, event handlers; not helpers yet) + * XXX bind, preserve, events, helpers, ... * XXX Template instance object * XXX constant diff --git a/docs/client/api.js b/docs/client/api.js index b523b44f95..26262aefc6 100644 --- a/docs/client/api.js +++ b/docs/client/api.js @@ -832,7 +832,12 @@ Template.api.tmpldecl = { id: "tmpldecl", name: "Template.myTemplate([data])", locus: "Client", - descr: ["Access a template function by name."] + descr: ["Call a template function by name to produce HTML."], + args: [ + {name: "data", + type: "Object", + descr: 'The data context object with which to call the template.'} + ] }; Template.api.tmpldecl_rendered = { diff --git a/docs/client/docs.js b/docs/client/docs.js index 93d8878e6e..6ef271b62b 100644 --- a/docs/client/docs.js +++ b/docs/client/docs.js @@ -149,6 +149,13 @@ var toc = [ {name: "rendered", id: "tmpldecl_rendered"}, {name: "created", id: "tmpldecl_created"}, {name: "destroyed", id: "tmpldecl_destroyed"} + ], + {name: "Template instances", id: "template_inst"}, [ + {instance: "template", name: "findAll"}, + {instance: "template", name: "find"}, + {instance: "template", name: "firstNode"}, + {instance: "template", name: "lastNode"}, + {instance: "template", name: "data"} ] ],