我的理解的是,當我運行訪問的控制器的一個實例或在燼視圖
App.CheeseController = Ember.Controller.extend({ type:"brie"});
類CheeseController
被創建並且當我激活奶酪路由類的一個實例是由這在我的把手模板中與控制器交談時我實際觸摸到的內容。
是否有可能從javascript控制檯(或從我的程序中)直接訪問該實例化對象?更一般地說,Ember自動生成的對象在哪裏?
我的理解的是,當我運行訪問的控制器的一個實例或在燼視圖
App.CheeseController = Ember.Controller.extend({ type:"brie"});
類CheeseController
被創建並且當我激活奶酪路由類的一個實例是由這在我的把手模板中與控制器交談時我實際觸摸到的內容。
是否有可能從javascript控制檯(或從我的程序中)直接訪問該實例化對象?更一般地說,Ember自動生成的對象在哪裏?
創建一個類CheeseController而當我激活奶酪路由類的一個實例是由這是談論我的車把模板控制器,當我真正接觸。
是的,這正是發生了什麼。 Ember創建一個App.CheeseController的單例實例,並在渲染句柄模板時將其作爲上下文提供。
是否有可能直接進入JavaScript控制檯
是內實例化對象。從javascript控制檯執行此操作的最佳方法是使用模板中的手柄{{debugger}}
助手。這將在模板的上下文中打開JS調試控制檯。
<script type="text/x-handlebars" data-template-name="cheese">
{{debugger}}
</script>
隨着調試器中打開,您可以訪問實例化控制器單爲this
,所以this.toString()
應該返回類似<App.CheeseController:ember225>
。
(或從我的程序中)?
取決於你的程序
this.controllerFor('cheese')
needs: ['cheese']
可以通過其他控制器通過controllers.cheese
屬性訪問該單身人員App.CheeseController
。見Automatically synthesize the controller 'needs' dependenciesneeds
陣列從模板控制器聲明的依賴,然後從你的模板內的奶酪控制器是:{{controllers.cheese}}
也可以通過訪問cheeseController實例燼容器,但請不要。該容器不是一個公共API。最近對Ember的更新使得訪問有些尷尬。這是因爲使用全局常量來訪問實例會破壞封裝,雖然這對控制檯來說很好,但應該避免在應用程序代碼中使用。有關更多細節,請參閱App.container was not meant to be a public API
更一般地說,Ember自動生成的對象在哪裏? 內部燼將容器中的控制器單例緩存。當然,它不是公共API的一部分,但如果您想了解如何工作的事情在內部檢查container_test.js和 What is the purpose of the Ember.Container
如果我只想在正在運行的應用程序上使用控制檯,而不是在模板中間停止執行,該怎麼辦? –
在這種情況下,您可以通過容器訪問控制器實例,例如'App .__ container __。lookup(「controller:posts」)'。請參閱http://emberjs.com/guides/understanding-ember/debugging/#toc_view-ember-data-s-identity-map –
使用燼主(PRE4),並僅用於調試** **的目的,你可以通過以下方式訪問控制器:'App .__ container __。lookup('controller:cheese')'。它也適用於'route:theRoute'。 – louiscoquio