我自己在学习ember.js。
我想知道Em.Controller的确切角色。
当我制作基本的余烬应用程序时,我唯一一次使用Em.Controller
App.ApplicationController = Em.Controller.extend();
但我不知道为什么它应该是Em.Controller而不是Em.ArrayController或Em.ObjectController。
我知道ArrayController或ObjectController用于处理模型。
所以我明白在处理模型时我必须使用ArrayController或ObjectController。
但是Em.Controller怎么样?
它仅适用于App的ApplicationController?
似乎Em.ArrayController和Em.ObjectController不是从Em.Controller继承的
我很困惑......
答案 0 :(得分:4)
Ember.Controller
是更简单的控制器类。正如您所见in the Ember.Controller source code,它只是一个带有目标(通常是路由器)和商店的对象,并继承Ember.ControllerMixin
。
Ember.ObjectController
是一个ObjectProxy,您可以看到in the ObjectController source code:设置内容后,所有getter / setter都会被委托给其内容。所以ObjectController用于操作一个项目。
Ember.ArrayController
的行为类似于ObjectController:它是一个代理,但对于一个数组,正如您所见in the ArrayController source code。因此ArrayController用于操作项目数组。
Ember.ControllerMixin
只有很少的处理视图{{outlets}}
的方法,因为您再次看到in the Ember.ControllerMixin source code(请注意此处的代码重新打开ControllerMixin)
你是对的,Ember.ArrayController
和Ember.ObjectController
不是从Ember.Controller
继承的,但它们都扩展了上述的Ember.ControllerMixin
。
我建议你阅读Advice on & Instruction in the Use Of Ember.js by Trek,这篇文章并不特别关于控制器,但你会学到很多东西,并了解它们是如何工作的(例如,出口)。