From 952fb4d01b6861a048dfe055f1cdaf2ed3ca663e Mon Sep 17 00:00:00 2001 From: David Glasser Date: Tue, 25 Mar 2014 17:07:24 -0700 Subject: [PATCH] a bunch of updates to Templates api section --- docs/client/api.html | 156 ++++++++++++++++++++++--------------------- docs/client/api.js | 13 ---- docs/client/docs.js | 8 +-- 3 files changed, 83 insertions(+), 94 deletions(-) diff --git a/docs/client/api.html b/docs/client/api.html index d0011432e4..7b982a1530 100644 --- a/docs/client/api.html +++ b/docs/client/api.html @@ -2011,11 +2011,19 @@ Example:

Templates

-A template that you declare as `<{{! }}template name="foo"> ... <{{! -}}/template>` 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 +When you write a template as `<{{! }}template name="foo"> ... <{{! +}}/template>` in an HTML file in your app, Meteor generates a +"component object" named `Template.foo`. + +{{#note}} + Meteor's component API is currently in flux. This section documents a few + features of the component object that are useful for writing apps; a future + release will elaborate more about how components work and about how to build + components that aren't just template. +{{/note}} + +The same template may occur many times on a 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 @@ -2024,61 +2032,6 @@ 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 template_call}} - -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. - - -{{> api_box template_rendered}} - -This callback is called once 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. - -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 template_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 template_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. - {{> api_box template_events}} @@ -2101,31 +2054,81 @@ Example: } }); -In Handlebars, this helper would then be invoked as `{{dstache}}foo}}`. +Now you can invoke this helper with `{{dstache}}foo}}` in the template defined +with `<{{! }}template name="myTemplate">`. -The following syntax is equivalent, but won't work for reserved property -names: +The following syntax is a shorthand for when you only have one helper to define: Template.myTemplate.foo = function () { return Session.get("foo"); }; + +{{> api_box template_rendered}} + +This callback is called once when an instance of Template.*myTemplate* is +rendered into DOM nodes and put into the document for the first time. + +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. + +Because your template has been rendered, you can use functions like +`this.findAll` which look at its DOM nodes. + +{{> api_box template_created}} + +This callback is called before your template's logic is evaluated for the first +time. 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. + +{{#note}} + The `created` callback is not currently very useful. In a later release, the + template instance object (or something like it) will be visible from helper + functions, and `created` will be a useful way to set up values that are read + from helpers. For now, you probably just want to use `rendered`. +{{/note}} + +{{> api_box template_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` or `rendered`. It fires once and is the last callback to fire. + +

Template instances

A template instance object represents an occurrence of a template in the document. It can be used to access the DOM and it can be -assigned properties that persist across page re-renderings. +assigned properties that persist as the template is reactively updated. Template instance objects are found as the value of `this` in the -`created`, `rendered`, and `destroyed` template callbacks and as an +`created`, `rendered`, and `destroyed` template callbacks, and as an argument to event handlers. -In addition to the properties and functions described below, you can -assign additional properties of your choice to the object. Property names -starting with `_` are guaranteed to be available for your use. Use -the `created` and `destroyed` callbacks to perform initialization or -clean-up on the object. +{{#note}} + You cannot currently access the template instance object from helpers. + We plan to refactor how template instances work and make them more + universally accessible. +{{/note}} + +In addition to the properties and functions described below, you can assign +additional properties of your choice to the object. Use the +[`created`](#template_created) and [`destroyed`](#template_destroyed) callbacks +to perform initialization or clean-up on the object. You can only access `findAll`, `find`, `firstNode`, and `lastNode` from the `rendered` callback and event handlers, not from `created` @@ -2134,7 +2137,11 @@ in the DOM. {{> api_box template_findAll}} -Returns an array of DOM elements matching `selector`. +Returns a [jQuery object](http://api.jquery.com/Types/#jQuery) of DOM elements +matching `selector`. This object is similar to an array but has other methods +defined by the jQuery library. + +You can also call this function as `this.$(selector)`. The template instance serves as the document root for the selector. Only elements inside the template and its sub-templates can match parts of @@ -2195,8 +2202,8 @@ information about the event, and `template`, a [template instance](#template_inst) for the template where the handler is defined. The handler also receives some additional context data in `this`, depending on the context of the current element handling the -event. In a Handlebars template, an element's context is the -Handlebars data context where that element occurs, which is set by +event. In a template, an element's context is the +data context where that element occurs, which is set by block helpers such as `#with` and `#each`. Example: @@ -2328,11 +2335,6 @@ catching typing in text fields, while `keydown` and `keyup` can be used for arrow keys or modifier keys. {{/dtdd}} -{{#dtdd "tap"}} Tap on an element. On touch-enabled -devices, this is a replacement to `click` that fires immediately. -These events are synthesized from `touchmove` and `touchend`. -{{/dtdd}} - Other DOM events are available as well, but for the events above, diff --git a/docs/client/api.js b/docs/client/api.js index 8e74f8d47a..6135eede92 100644 --- a/docs/client/api.js +++ b/docs/client/api.js @@ -1746,19 +1746,6 @@ Template.api.http_del = { }; -// XXX move these up to right place -Template.api.template_call = { - id: "template_call", - name: "Template.myTemplate([data])", - locus: "Client", - descr: ["Call a template function by name to produce HTML."], - args: [ - {name: "data", - type: "Object", - descr: 'Optional. The data context object with which to call the template.'} - ] -}; - Template.api.template_rendered = { id: "template_rendered", name: "Template.myTemplate.rendered = function ( ) { ... }", diff --git a/docs/client/docs.js b/docs/client/docs.js index 35db9c03dd..6af0e15408 100644 --- a/docs/client/docs.js +++ b/docs/client/docs.js @@ -232,12 +232,12 @@ var toc = [ ], {name: "Templates", id: "templates_api"}, [ - {prefix: "Template", instance: "myTemplate", id: "template_call"}, [ + {prefix: "Template", instance: "myTemplate", id: "templates_api"}, [ + {name: "events", id: "template_events"}, + {name: "helpers", id: "template_helpers"}, {name: "rendered", id: "template_rendered"}, {name: "created", id: "template_created"}, - {name: "destroyed", id: "template_destroyed"}, - {name: "events", id: "template_events"}, - {name: "helpers", id: "template_helpers"} + {name: "destroyed", id: "template_destroyed"} ], {name: "Template instances", id: "template_inst"}, [ {instance: "this", name: "findAll", id: "template_findAll"},