0

我正在尝试使用 ember-data 制作一个 ember.js 应用程序,其中基本上有两个表来自使用 laravel 4 的 mysql 数据库。这里第一个表的一列是另一个表条目的外键。我正在浏览教程,我在 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 号,所以我想要实现的是以某种方式关联这两个模型,所以我可以使用 Leader 的 party 下提供的 id 或整数从派对模型中获取特定记录模型。

我的路线代码是这样的:

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 从派对模型中获取派对名称。

这些是我当前的控制器:

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 模板中的派对模型中获取记录?

4

1 回答 1

0

我认为您可以在获取特定领导者时利用Ember 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 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计算属性。

另外,不确定将 np​​rogress 调用放在路由的activatedeactivate钩子中是否更好?

于 2014-04-07T16:19:31.637 回答