2012-07-30 21 views
1

我構建了一個ember.js應用程序,該應用程序也與一些其他jQuery插件關聯。一旦呈現視圖,我需要調用一個jQuery插件。我已經嘗試連接到didInsertElement,但顯然綁定表單字段的值在插入時未分配。當視圖完全呈現或綁定初始化時,是否存在回調?Ember.js Ember.View didRender事件

即。

MyView: Ember.View.extend 
    #Boaring normal stuff here 

    didInsertElement: -> 
     $('.some-class').doSomething() 

{{view Ember.TextField valueBinding="someField" class="some-class"}} 

不起作用,因爲的.some-class值是一個沒有被設定。我不想使用setTimeout並創建競賽條件。

+0

也許你可以使用Ember.run.sync()強制所有綁定。但我認爲還有另一種方式。你可以發佈更多的上下文,甚至更好地做一個jsfiddle來說明。 http://jsfiddle.net/Sly7/AvgvJ/作爲基地 – 2012-07-30 17:20:46

+0

@ sly7_7謝謝,這裏是小提琴http://jsfiddle.net/AhPyJ/,請忽略名爲'傻'的東西,我是一個新的父母和一切不愉快的現在是'傻'...我使用的插件是TinyMCE,但它不是跨域友好的,所以我只寫了一些didily插件來舉例說明錯誤。 – wmarbut 2012-07-30 19:16:33

+0

我認爲你的代碼在你使用$('。傻領域')的時候起作用。 (你錯過了點)。注意,你可以通過調用這個函數來訪問視圖的jquery對象。$() – 2012-07-30 19:41:26

回答

4

好吧,發生了什麼事,是在插入視圖後更新testValue綁定。所以你可以做的是在Ember.run.next()函數中調用$('.silly-field').doSomethingSilly();

寫在文檔:

Ember.run(myContext, function(){ 
// code to be executed in the next RunLoop, which will be scheduled after the current one 
}); 
+0

啊,RunLoop有關,這就是訣竅。謝謝! – wmarbut 2012-07-30 20:19:54

+0

很高興幫助你:) – 2012-07-30 20:25:42

+0

這是一個更新的小提琴任何人想看到這個實現http://jsfiddle.net/wmarbut/fk6fb/3/ – wmarbut 2012-07-30 20:27:12