我正在尝试在Ember中创建一个应用程序的一部分,其中视图中将有多个插座,并且每个插座将连接到collectionView。问题似乎是第二个出口变得“散落”了第一个变量。
现在我正在做的事情更多,但是: Here's a fiddle简化问题。
有3个把手模板: 申请
{{outlet dogs}}
{{outlet cats}}
猫
Cat:{{view.content.name}}
狗
Dog:{{view.content.name}}
应用程序模板中的插座已连接:
index:Em.Route.extend({
route:'/',
connectOutlets:function(router, context){
router.get('applicationController').connectOutlet('cats', 'catsCollection');
router.get('applicationController').connectOutlet('dogs', 'dogsCollection');
},
})
然后对于猫和狗, 我创建了一个存储内容的对象:
App.Cats = Em.Object.create({
content:[{name:"Russian Blue"}, {name:"British Short Hair"}, {name:"Domestic Tabby"}]
});
集合视图:
App.CatsCollectionView = Em.CollectionView.extend({
content:App.Cats.content,
itemViewClass:'App.CatsView'
});
要呈现的集合视图的视图类:
App.CatsView = Em.View.extend({
templateName:"cats",
init:function(){
}
});
但结果将显示第二个插座的内容在第二个插座中重复出现:
Dog:Huski
Dog:Samoid
Dog:Elkhound
HuskiSamoidElkhound
Cat:Russian Blue
Cat:British Short Hair
Cat:Domestic Tabby
那么这是如何发生的,又如何解决?
答案 0 :(得分:0)
您没有覆盖init
函数。默认情况下,View会调用init本身并执行一些你看不到的奇特魔法。通过声明该函数,您已阻止该函数被调用。如果您确实想要添加init
功能,那么您应该在功能顶部调用this._super();
,如更新的jsfiddle中所示。
this._super();
所做的是从继承的对象(在本例中为'View'对象)调用init函数,然后执行您的附加代码。