2012-08-14 110 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