2012-08-14 112 views
0

我有下面的代碼片斷:ember.js添加子視圖

App.TripLegView = Em.View.extend({ 
    transportMeanType: null, 
    transportMeanTypeChanged: function () { 
      this.carView = App.CarView.create(); 
      var childView = this.createChildView(this.carView); 
      this.get('childViews').pushObject(childView); 
    } 
}).observes('transportMeanType'), 

App.CarView = Em.View.extend(); 

然而當調試上面的代碼中,子視圖似乎沒有被添加到childViews陣列。

任何人都可以解釋如何正確添加子視圖。

回答

0

首先,看起來你是在濫用observes(),應該在函數中定義。 如果你想操縱childviews,我認爲你應該使用Ember.ContainerView

您的代碼會是這樣的:

App.CarView = Em.View.extend(); 

App.TripLegView = Em.ContainerView.extend({ 
    transportMeanType: null, 

    transportMeanTypeChanged: function () { 
    this.carView = App.CarView.create(); 
    var childView = this.createChildView(this.carView); 
    this.get('childViews').pushObject(childView); 
    }.observes('transportMeanType') 
}); 

如果它不能正常工作,請張貼的jsfiddle來舉個例子。

+0

非常感謝,我發現你可以添加孩子Em.View的一個實例,因爲他們在渲染過程中添加。但是,我想問你關於觀察()函數。你爲什麼說我濫用了它。我遵循官方文檔。 [link](http://emberjs.com/documentation/#toc_observers) – ppoliani 2012-08-15 11:03:38

+0

如果仔細觀察,可以看到您將它放在TrippleLegView上,而不是在transportMeanTypeChanged上。也許這只是你的問題中的一個錯誤,而不是你的代碼中。 – 2012-08-15 11:10:00