我也在discuss.emberjs.com上发布了这个,但试图看看这里是否有人知道解决方案。所以我试图从ArrayController中检索模型但由于某种原因我无法检索它,因为它给了我未定义/空数组。
在ArrayController中的init函数中,我有以下内容:
init: function(){
this._super();
console.log(this);
console.log(this.content);
console.log(this.get('content'));
console.log(this.model);
console.log(this.get('model'));
}
“this.content”和“this.model”评估为未定义。两个.get()都返回一个空数组。但奇怪的是“console.log(this);”打印以下内容:
Class {_subControllers: Array[0], toString: function, __ember1409674198526: "ember453",
__ember_meta__: Object, constructor: function…}
__ember1409674198526: "ember453"
__ember_meta__: Object
__nextSuper: undefined
_qpDelegate: function (controller, prop) {
_subControllers: Array[0]
model: Class
__ember1409674198526: "ember392"
__ember_meta__: Object
__nextSuper: undefined
content: Array[8]
isLoaded: true
isUpdating: false
store: Class
toString: function () { return ret; }
type: my-app-v3@model:suit:
__proto__: Object
toString: function () { return ret; }
__proto__: Object
所以“this”在model->内容(8个元素的数组)下有我需要的模型。我真的很困惑,为什么我只是访问“this”的内部元素时会遇到这些错误。
任何人都知道为什么会发生这种奇怪的行为?
作为参考,我使用的是Ember-CLI(0.0.42)。
答案 0 :(得分:2)
您可能正在使用控制器的init
方法进行记录,我不相信这是推荐的模式。
通常,您在setupController
的{{1}}挂钩中操纵控制器。此时,保证控制器的模型已经解决,您应该可以通过Route
访问它。
答案 1 :(得分:1)
要解决您的问题,请尝试以下方法:
App.IndexController = Ember.ArrayController.extend({
init: function () {
this._super();
var that = this;
Ember.run.next(function () {
console.log(that);
console.log(that.get('model'));
});
}
});
对于此异常的技术说明,请注意console.log()
在调用时并未将对象真正字符串化为其状态。相反,它会记住对象的引用,允许您“探索”#34;它是动态的。但是,该对象保持不变,对其的任何更改都会反映在控制台中。
因此,在调用init()时,this
引用确实没有model
属性。这就是为什么console.log(this.model)
什么都不产生的原因。但是,在init之后立即填充模型。因此,当您检查控制台时,您可以在缓存的this
引用中看到它。
要确认这一点,请在console.log调用之后设置一个断点,并在暂停时检查控制台输出。模型属性不会存在。