Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Does afterRender work with Knockout components?

afterRender works with template bindings, but after converting my templates to components, there does not seem to be any way to use afterRender. I have tried looking for an example of a component that uses afterRender, but cannot find anything.

like image 762
Eric Kolotyluk Avatar asked Oct 07 '14 19:10

Eric Kolotyluk


1 Answers

I could not get the method working as per the above post. However i found a workaround on the git issue list and it doesn't require a custom KO Binding.

Add the below line in your component template html or string of code.

 <span data-bind="template: { afterRender: init }"></span> 

Then create a init function in your module / viewModel:

 this.init = function() {    Do cool DOM stuff here. } 

or depending on your viewModel structure:

viewModel: function(params) {     return {         init: function () {          }     }; }, 

Works like a charm. Example of it working is here

http://jsfiddle.net/gLcfxkv6/1/

Thread on knockout git here: https://github.com/knockout/knockout/issues/1533

Thanks to vamps on git for the workaround.

like image 100
Piotr Stulinski Avatar answered Sep 21 '22 01:09

Piotr Stulinski