编辑:我想我找到了解决方案。正如我在我的问题中所说,变量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。:对不起我的英语:(
答案 0 :(得分:1)
正如我在编辑中所说,问题是findAllByMaster
方法返回一个promise,因此必须先将其解析,然后再将其分配给控制器的属性。
我认为有一种更优雅或更有效的解决方法,所以欢迎另一种解决方案。