Ember Data属于并加载另一个控制器型号记录

时间:2013-10-28 13:54:12

标签: javascript ember.js ember-data

我正在尝试使用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模板中的派对模型中获取记录?

1 个答案:

答案 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调用放在路由的activatedeactivate挂钩中是否更好?