[英]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
方法記錄日志,我認為這不是推薦的模式。
通常,您可以在Route
的setupController
掛鈎中操作一個控制器。 到那時,可以肯定控制器的模型已經解決,並且通過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.