我开始走的路上有一条返回不同模型的集合(即集合包含App.Person,App.Place,App.Thing等)我已经能够通过提供一个来处理这个问题。基于上下文呈现适当模板的通用视图。这是基本的想法:
App.SearchView = Ember.View.extend({
templateName:function(){
var item = this.get('context');// get the model
var itemName = item.constructor.toString();// get the type
if(itemName == "App.Person"){
return "personTemplate";// this is the name of the template
}
if(itemName == "App.Place"){
return "placeTemplate";
}
}.property().cacheable()
}
对于包含多种模型类型的集合,这是正确的吗?或者我应该使用不同的收藏或技术?
答案 0 :(得分:1)
当我有多个模型时,这是我采取的方法。
RSVP,Ember的promise库让你返回一个promises哈希值。在完成所有承诺之前,模型钩子不会返回。如果散列中的某个属性没有返回一个promise(即只是立即返回一个值),一切仍然正常。
model: function(){
Ember.RSVP.hash({
person: getPersonLogic,
place: getPlaceLogic,
thing: getThingLogic
});
}
然后在你的模板中:
{{render 'personTemplate' model.person}}
{{render 'placeTemplate' model.place}}
{{render 'thingTemplate' model.thing}}
如果您只想一次显示一个:
//route
renderTemplate: function(controller,model){
this.render();
//render person by default
this.render("personTemplate", {outlet: "named", into: "routeThatContainsOutlet", model: model.person})
},
actions: {
showPerson: function(){
this.render("personTemplate", {outlet: "named", into: "routeThatContainsOutlet", model: model.person})
},
showPlace: function(){
this.render("placeTemplate", {outlet: "named", into: "routeThatContainsOutlet", model: model.place})
},
showThing: function(){
this.render("thingTemplate", {outlet: "named", into: "routeThatContainsOutlet", model: model.thing})
}
}
在你的模板中:
<button {{action showPerson}}>Show Person</button>
<button {{action showPlace}}>Show Place</button>
<button {{action showThing}}>Show Thing</button>
{{outlet named}}
目前还不清楚您的实际使用情况,但这应该让您朝着正确的方向努力