Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript EmberJS-从控制器检索模型的奇怪行为_Javascript_Ember.js_Ember Cli - Fatal编程技术网

Javascript EmberJS-从控制器检索模型的奇怪行为

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

我也在display.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'));
}
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调用之后放置一个断点,并检查