我正在尝试使用ember-data创建一个ember.js应用程序,其中基本上有两个来自mysql数据库的表使用laravel 4。这里第一个表的一列是另一个表条目的外键。我正在浏览教程,我在ember数据中偶然发现了这个函数。
DS.belongsTo
我用它作为:
App.Leader = DS.Model.extend({
name_en: DS.attr('string'),
name_ne: DS.attr('string'),
photo: DS.attr('string'),
education: DS.attr('string'),
contact: DS.attr('string'),
address: DS.attr('string'),
age: DS.attr('string'),
party: DS.belongsTo('party'),
history: DS.attr('string')
});
App.Party = DS.Model.extend({
name: DS.attr('string'),
logo: DS.attr('string'),
headquarter: DS.attr('string'),
president: DS.attr('string'),
established: DS.attr('string'),
philosophy: DS.attr('string')
});
这里在Leader模型中,party列只包含Party Model的id号,所以我想要实现的是以某种方式关联这两个模型,所以我可以使用提供的id或整数从party模型中获取该特定记录党领袖模特。
我的路线代码是这样的:
App.LeadersRoute = Ember.Route.extend({
model: function(){
NProgress.start();
var data = this.store.find('leader');
data.then(function(value){
NProgress.done();
});
return data;
}
});
App.LeaderRoute = Ember.Route.extend({
model: function(params){
NProgress.start();
var data = this.store.find('leader', params.leaders_id);
data.then(function(value){
NProgress.done();
});
return data;
}
});
App.PartiesRoute = Ember.Route.extend({
model: function(){
NProgress.start();
var data = this.store.find('party');
data.then(function(value){
NProgress.done();
});
return data;
}
});
App.PartyRoute = Ember.Route.extend({
model: function(params){
NProgress.start();
var data = this.store.find('party', params.parties_id);
data.then(function(value){
NProgress.done();
});
return data;
}
});
我想要实现的是当我创建一个新的领导者记录时,我需要一个选择输入,显示所有当前聚会记录的列表并选择其中一个,当用户创建一个领导者然后在聚会列下它应该放一个id对应于派对模型下的特定记录。
当用户浏览某个特定的领导者记录时,它还应该使用领导者模型中的party列中提供的id从派对模型中获取派对名称。
这些是我目前的控制人员:
App.LeadersController = Ember.ArrayController.extend({
isNew: false,
actions: {
newRecord: function(){
this.set('isNew', true);
},
create: function(){
//create code
},
cancel: function(){
this.set('isNew', false);
}
},
});
App.LeaderController = Ember.ObjectController.extend({
isEditing: false,
actions: {
edit: function(){
this.set('isEditing', true);
},
doneEditing: function(params){
this.set('isEditing', false);
},
delete: function(params){
//delete code
}
}
});
App.PartiesController = Ember.ArrayController.extend({
file_name: null,
isNew: false,
actions: {
newRecord: function(){
this.set('isNew', true);
},
create: function(){
//create code
},
cancel: function(){
this.set('isNew', false);
}
},
});
App.PartyController = Ember.ObjectController.extend({
isEditing: false,
actions: {
edit: function(){
this.set('isEditing', true);
},
doneEditing: function(params){
this.set('isEditing', false);
},
delete: function(params){
//delete code
}
}
});
如何从Leader模板中的派对模型中获取记录?
答案 0 :(得分:0)
我认为当你拿到一个特定的领导者时,你可以使用Ember Data relationships,如此(未经测试):
App.LeaderRoute = Ember.Route.extend({
model: function(params){
NProgress.start();
var data = this.store.find('leader', params.leaders_id);
data.then(function(value){
NProgress.done();
return value.get('party');
});
return data;
}
});
显示领导者创建模板中所有参与方的列表,我认为您可以在LeaderController中为所有参与方设置一个属性,如此(未经测试):
App.LeaderController = Ember.ObjectController.extend({
isEditing: false,
selectedParty: function() {
return this.model.get('party');
}.property('model'),
parties: function() { return this.store.find('party') },
actions: {
edit: function(){
this.set('isEditing', true);
},
doneEditing: function(params){
this.set('isEditing', false);
},
delete: function(params){
//delete code
}
}
});
然后,您可以创建Ember.Select视图并将其内容绑定到上下文控制器的parties
属性,并将其值设置为selectedParty
计算属性。
另外,不确定将nprogress调用放在路由的activate
和deactivate
挂钩中是否更好?