Usando o Ember.js, como executo algum JS depois que uma view é renderizada?

Como faço para executar uma function depois que uma exibição Ember é inserida no DOM?

Aqui está o meu caso de uso: Eu gostaria de usar o jQuery UI classable para permitir a sorting.

Você precisa replace didInsertElement como “Chamado quando o elemento da visualização foi inserido no DOM. Substitua essa function para fazer qualquer configuração que exija um elemento no corpo do documento.”

Dentro do callback didInsertElement , você pode usar this.$() Para obter um object jQuery para o elemento da view.

Referência: https://github.com/emberjs/ember.js/blob/master/packages/ember-views/lib/views/view.js

Você também pode usar o método afterRender

 didInsertElement: function () { Ember.run.scheduleOnce('afterRender', this, function () { //Put your code here what you want to do after render of a view }); } 

Você precisa triggersr o que quiser no retorno de chamada didInsertElement em sua Visualização:

 MyEmberApp.PostsIndexView = Ember.View.extend({ didInsertElement: function(){ // 'this' refers to the view's template element. this.$('table.has-datatable').DataTable(); } }); 

Ember 2.x: o modo de exibição é obsoleto, use o componente

Você precisa entender o ciclo de vida do componente para saber quando certas coisas acontecem.

Conforme os componentes são renderizados, re-renderizados e finalmente removidos, o Ember fornece ganchos do ciclo de vida que permitem que você execute o código em momentos específicos da vida de um componente.

https://guides.emberjs.com/v2.6.0/components/the-component-lifecycle/

Geralmente, didInsertElement é um ótimo lugar para integrar com bibliotecas de terceiros.

Esse gancho garante duas (2) coisas,

  1. O elemento do componente foi criado e inserido no DOM.
  2. O elemento do componente é acessível através do método $() do componente.

Em você precisa de JavaScript para rodar sempre que os atributos mudarem

Execute seu código dentro do gancho didRender .

Mais uma vez, leia a documentação do ciclo de vida acima para obter mais informações