Some question about template


#1

how can i get the element after rendered?
use track,autorun ??
i am confuse! pls help me if you know


#2

Docs

What are you planing on doing in the onRendered function? In general, this should be the template context.


#3

i want get the rendered element selector like the second result in console show


#4

This depends on how your template(s) are structured. People always assume that Template.onRendered fires when all the HTML in your template is ready. If you have any reactivity in your template (iterating over a cursor, include sub template) then the template is rendered, but the HTML content is not ready when you think it is.


#5

i add this in onRendered function

     Tracker.autorun  ->

          if FlowRouter.subsReady('debate')

               console.log $("#edit-content")

but it still console this, there is only this subscri

additional:

vistit the url path directly, it will get what i wanted.

but this page is redirect from other by use “FlowRouter.go” , then it not work correctly


#6

In order for the code to run again you need to tell FlowRouter to watch path changes

As with all current route properties, these are not reactive, but can be combined with FlowRouter.watchPathChange() to get group names reactively.

check the docs


#7

yes i have

  Tracker.autorun  ->
	FlowRouter.watchPathChange();

in both template.xxx.onRendered


#8

That is too late. You need to specify it OUTSIDE of outorun.


#9

unfortunately , i move it out of autorun or put it in Meteor.startup , all same

i put part of my code in the two templates

template1.coffee

'click .fbtn-container': (e, instance) ->
	
	template = this
	Meteor.call("createDebate", null, null, null, new Array, false, (error, result)->
		
		if error?
			toastr.error t(error.message)
		else 
			if result?
				$('body').addClass('mode-expand');
				template.result = result
				createtimeout = Meteor.setTimeout -> 
					$('body').removeClass('mode-expand');
					Meteor.clearTimeout createtimeout
					FlowRouter.go "debateedit", 
						slug: template.result

				,500
			else
				toastr.error t("Debate_Create_Failed");
	);

template2.coffee

 Template.template2.onRendered ->

     Tracker.autorun  ->	
	if FlowRouter.subsReady('debate')
		console.log $("#edit-content")

#10

In an event the instance is actually the template, so template = this is not what you want. Second, you might want to grab the slug in your autorun from FlowRouter, since it is now reactive and will trigger your autorun

Tracker.autorun ->
     var slug = FlowRouter.getParam("slug");

#11

i don’t think it the flowrouter.watchPathChange(),

the blaze confuse me, i can’t get when the blaze render dom and data finished first time

blazehtml = Blaze.toHTML(Template.permissionsRole)
autoruntracker = Tracker.autorun (c)->
	console.log this # in tracker.autorun this is Window 
	console.log blazehtml #getView()# 
	if instance.subscriptionsReady() && $("#form-users").length > 0
		console.log this.$("#form-users")
		autoruntracker = undefined
		c.stop

so i use blaze.tohtml rerender get the dom html string, autorun monitor it to judge is blaze render dom and data finished first time