2014-03-03 57 views
1

我在函數didInsertElement中初始化一個jQuery插件滑塊。如何在init之後更新視圖,但不使用didInsertElement()?

不幸的是,我還在更新頁面上的計算屬性,並且當計算屬性更新時,滑塊重新初始化,因爲didInsertElement函數會再次觸發。

有一次 HTML元素在視圖中印將火功能,這樣我就可以初始化我的滑塊,但不是每一個頁面變更,或元素被刪除或移除時間?


編輯:

我想:

didInsertElement: function() { 
    Ember.run.once(this, 'initSliders'); 
} 

但不幸的是,它仍然運行在每次計算的屬性更新時間。


編輯2:

我試圖包裹在初始化一個布爾值

didInsertElement: function() { 
    if(!this.get('slidersInitialized')) { 
     Ember.run.once(this, 'initSliders'); 
     this.set('slidersInitialized', true); 
    } 
} 

,但沒有工作,要麼。由於視圖重新渲染,滑塊需要重新初始化。

會包裝與計算屬性更新視圖的部分阻止整個視圖被重新渲染,防止滑塊的元素被銷燬和重新創建?

回答

0

我發現了我的問題的答案。

所有我需要做的,是包裹在它自己的視圖中的值,以防止視圖的其餘部分被重新描繪:

原始模板:

... 
<div class="append field"> 
    {{input class="narrow input" id="widthInput" placeholder="Any/Unknown" value=width}} 
    <span class="adjoined">{{view.widthInFt}}</span> 
</div> 
... 

新模板:

... 
<div class="append field"> 
    {{input class="narrow input" id="widthInput" placeholder="Any/Unknown" value=width}} 
    {{view view.widthInFtView}} 
</div> 
... 

<script type="text/x-handlebars" id="widthInFt"> 
    {{view.widthInFt}} 
</script> 

創建我的模板後,我創建視圖類作爲我的另一個視圖中的一個孩子,我不想被重新渲染:

widthInFtView: Ember.View.extend({ 
    templateName: "widthInFt", 
    tagName: "span", 
    classNames: ["adjoined"], 

    widthInFt: function() { 
     var ft = parseInt(this.get('parentView.widthSliderValue')/12, 10); 
     var inches = parseInt(this.get('parentView.widthSliderValue') % 12, 10); 
     return ft + " ft. " + inches + " in."; 
    }.property('parentView.widthSliderValue') 
}), 
相關問題