簡體   English   中英

EmberJS-從控制器獲取奇怪的行為模型

[英]EmberJS - Strange Behavior Retrieving Model from Controller

我也將此內容發布在describe.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-> content(由8個元素組成的數組)下需要的模型。 我真的很困惑為什么我在訪問“ this”的內部元素時卻遇到這些錯誤。

有人知道為什么會發生這種奇怪的行為嗎?

作為參考,我正在使用Ember-CLI(0.0.42)。

可能是您從控制器的init方法記錄日志,我認為這不是推薦的模式。

通常,您可以在RoutesetupController掛鈎中操作一個控制器。 到那時,可以肯定控制器的模型已經解決,並且通過controller.get('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)什么都不產生的原因。 但是,在初始化之后,將立即填充模型。 因此,當您檢查控制台時,可以在緩存的this參考中看到它。

要確認這一點,請在console.log調用之后放置一個斷點,並在暫停時檢查控制台輸出。 模型屬性將不存在。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM