在路径的setupController中检索不同的模型时出错

时间:2013-08-02 19:40:25

标签: ember.js

编辑:我想我找到了解决方案。正如我在我的问题中所说,变量profiles是一个承诺所以我尝试了以下内容并且它有效:

...
setupController: function(controller, model) {
    controller.set('model', model);

    var profiles = App.Profile.findAllByMaster(model.get('id'));
    profiles.then(function(data) {
        controller.set('profiles', data);
    });
}
...

结束编辑

当我尝试从Assertion failed: an Ember.CollectionView's content must implement Ember.Array. You passed [object Object]挂钩中的另一个模型获取数据时,我遇到错误:setupController

路由为MastersMaster,相关模型为Master,我尝试获取属于当前Profiles的{​​{1}}模型。

我没有使用Ember Data或类似的东西。它只是带有$ .ajax调用的纯jQuery。

这很难解释,所以这里是代码摘录:

Master

如果App.MastersMasterRoute = Ember.Route.extend({ model: function(params) { return App.Master.find(params.master_id); }, setupController: function(controller, model) { controller.set('model', model); // if I comment these two lines it works but I don't get the profiles (obviously) var profiles = App.Profile.findAllByMaster(model.get('id')); controller.set('profiles', profiles); } }); App.Profile = Ember.Object.extend({ id: null, name: '', master_id: null }); App.Profile.reopenClass({ findAllByMaster: function(master_id) { var profiles = Ember.A(); return $.ajax({ url: 'ajax/get.profiles.php', type: 'GET', dataType: 'json', data: { master_id: master_id } }).then(function(response) { $.each(response, function(i, item) { profiles.pushObject(App.Profile.create(item)); }); return profiles; }); } }); 变量console.log在执行profiles之前我发现它是一个承诺而不是预期的controller.set个数组。我想我必须先解决这个承诺,但我不知道。

P.S。:对不起我的英语:(

1 个答案:

答案 0 :(得分:1)

正如我在编辑中所说,问题是findAllByMaster方法返回一个promise,因此必须先将其解析,然后再将其分配给控制器的属性。

我认为有一种更优雅或更有效的解决方法,所以欢迎另一种解决方案。