我有一个hasMany
关系的模型:
var Bus = DS.Model.extend({
model: DS.attr('string'),
passengers: DS.hasMany('passenger', {async: true})
});
这似乎有效,因为我可以在我的模板中迭代乘客。
现在我希望在我的控制器中有一个可以与乘客做某事的动作。它涉及一些业务逻辑,我需要遍历乘客列表。
我的问题是,当我从控制器中的模型中获取乘客时,它不是一个数组,它是某种对象。如何从此对象获取数组?
以下是我的尝试:
export default Ember.ObjectController.extend({
actions: {
start: function() {
var bus = this.get('model');
var passengers = model.get('passengers');
passengers.then(function(passengerArray) {
var stuff = passengerArray.get('content');
console.log('The thing that I wish were an array of passengers',passengerArray);
console.log('The type of that thing',typeof(passengerArray));
});
}
}
});
它给了我object
这个类型,它显然是以一种对我来说难以理解的方式包含在内容中。
答案 0 :(得分:3)
console.log(passengerArray)
控制台中的输出是什么如果你使用一个体面的浏览器,你将获得的不仅仅是对象,而且实际上能够获得对象的信息。
当你使用model.get("passengers")
时,你得到了一个乘客"乘客的承诺#34; 。使用then
是获取数据的正确方法,您将获得一个实现Ember.Array的对象作为当时调用的函数的参数。
如果你想要" raw js Array"您可以使用passengerArray.toArray()
函数来获取它,如果您的目标是迭代或获得长度,或者您可以使用emberArray =>提供的方法。 http://emberjs.com/api/classes/Ember.Array.html
正如您在上面的文档中看到的那样content
属性至少不公开,甚至可能不存在:)(您也可以尝试passengerArray.get("[]")
)来检索"内容& #34;
答案 1 :(得分:0)
你得到的是一个承诺,因为它是async
关系。访问实际的数组就是这样做:
bus.get('passengers').then(function(passengers) {
// passengers is the actual array
});
答案 2 :(得分:0)
当我尝试使用灯具时(因此数据已存在于商店中),我能够使用
获取阵列var bus = this.get('model');
var passengers = model.get('passengers').get('currentState');
然后我能够使用passengers[0].get('content')
(这是我想要的(?))。我的猜测是,从服务器获取数据时,您需要使用
var bus = this.get('model');
var passengers = model.get('passengers');
passengers.then(function(passengerArray) {
var passengerContent = passengerArray.get('currentState')[0].get('content')
});
答案 3 :(得分:0)
除非需要/需要。这样做:
var bus = this.get('model');
var passengersPromise = bus.get('passengers');
passengersPromise.then(function(passengers) {
console.log('RecordArray', passengers);
var passengerArrayWithRecords = passengers.toArray();
console.log('array with records', passengerArrayWithRecords);
var passengerArray = passengers.map(function(record) {
return record.toJSON();
});
console.log('plain array with javascript objects', passengerArray);
});
在此处查看此行动:http://emberjs.jsbin.com/mapiyafaxa/2/edit?html,js,output
参考: