Javascript EmberJS-从控制器检索模型的奇怪行为
我也在display.emberjs.com上发布了这篇文章,但我想看看这里是否有人知道这个解决方案。因此,我试图从ArrayController检索模型,但由于某些原因,我无法检索它,因为它提供了未定义/空的数组 在ArrayController中的init函数中,我有以下内容:Javascript EmberJS-从控制器检索模型的奇怪行为,javascript,ember.js,ember-cli,Javascript,Ember.js,Ember Cli,我也在display.emberjs.com上发布了这篇文章,但我想看看这里是否有人知道这个解决方案。因此,我试图从ArrayController检索模型,但由于某些原因,我无法检索它,因为它提供了未定义/空的数组 在ArrayController中的init函数中,我有以下内容: init: function(){ this._super(); console.log(this); console.log(this.content); console.log(t
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'));
}
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.content”和“this.model”计算为未定义。get()返回一个空数组。但奇怪的是,“console.log(this);”打印以下内容:
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'));
}
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->content(8个元素的数组)下有我需要的模型。我真的很困惑,为什么在访问“this”的内部元素时会出现这些错误
有人知道为什么会发生这种奇怪的行为吗
作为参考,我使用的是Ember CLI(0.0.42)。可能是您从控制器的
init
方法登录,我认为这不是推荐的模式
通常,您需要在
路由
的设置控制器
钩子中操纵控制器。在这一点上,控制器的模型被保证已经解决,并且您应该可以通过controller.get('content')
访问它,这可能是因为您是从控制器的init
方法登录的,我认为这不是推荐的模式
通常,您需要在
路由
的设置控制器
钩子中操纵控制器。在这一点上,控制器的模型被保证已经解决,并且您应该可以通过controller.get('content')
访问它,这可能是因为您是从控制器的init
方法登录的,我认为这不是推荐的模式
通常,您需要在
路由
的设置控制器
钩子中操纵控制器。在这一点上,控制器的模型被保证已经解决,并且您应该可以通过controller.get('content')
访问它,这可能是因为您是从控制器的init
方法登录的,我认为这不是推荐的模式
通常,您需要在
路由
的设置控制器
钩子中操纵控制器。此时,控制器的模型保证已解决,您通过controller访问它应该没有问题。获取('content')
要解决当前问题,请尝试以下方法:
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()
并没有真正将对象字符串化为调用时的状态。相反,它会记住对对象的引用,允许您动态地“探索”它。但是,对象保持不变,其上的任何更改都会反映在控制台中
因此,在调用init()时,this
引用实际上没有model
属性。这就是为什么console.log(this.model)
不会产生任何结果。但是,在init之后,立即填充模型。因此,当您检查控制台时,您可以在缓存的this
参考中看到它
要确认这一点,请在console.log调用之后放置一个断点,并在暂停时检查控制台输出。模型属性将不存在。若要解决当前问题,请尝试以下操作:
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()
并没有真正将对象字符串化为调用时的状态。相反,它会记住对对象的引用,允许您动态地“探索”它。但是,对象保持不变,其上的任何更改都会反映在控制台中
因此,在调用init()时,this
引用实际上没有model
属性。这就是为什么console.log(this.model)
不会产生任何结果。但是,在init之后,立即填充模型。因此,当您检查控制台时,您可以在缓存的this
参考中看到它
要确认这一点,请在console.log调用之后放置一个断点,并在暂停时检查控制台输出。模型属性将不存在。若要解决当前问题,请尝试以下操作:
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()
并没有真正将对象字符串化为调用时的状态。相反,它会记住对对象的引用,允许您动态地“探索”它。但是,对象保持不变,其上的任何更改都会反映在控制台中
因此,在调用init()时,this
引用实际上没有model
属性。这就是为什么console.log(this.model)
不会产生任何结果。但是,在init之后,立即填充模型。因此,当您检查控制台时,您可以在缓存的this
参考中看到它
要确认这一点,请在console.log调用之后放置一个断点,并在暂停时检查控制台输出。模型属性将不存在。若要解决当前问题,请尝试以下操作:
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()
并没有真正将对象字符串化为调用时的状态。相反,它会记住对对象的引用,允许您动态地“探索”它。但是,对象保持不变,其上的任何更改都会反映在控制台中
因此,在调用init()时,this
引用实际上没有model
属性。这就是为什么console.log(this.model)
不会产生任何结果。但是,在init之后,立即填充模型。因此,当您检查控制台时,您可以在缓存的this
参考中看到它
要确认这一点,请在console.log调用之后放置一个断点,并检查