Ember.js 谁在为我实例化我的对象?:s

Ember.js 谁在为我实例化我的对象?:s,ember.js,Ember.js,目前我正在ember中尝试路由,并有一个工作示例。问题是,我有点搞不懂它为什么会起作用。目前该路线只有2个简单视图。代码如下: App=Em.Application.create(); App.Router=Ember.Router.extend({ 根:Ember.Route.extend({ 索引:Ember.Route.extend({ 路线:“/”, redirectsTo:'home'//当点击基本URL时,重定向到home }), 主页:Ember.Route.extend({ 路线

目前我正在ember中尝试路由,并有一个工作示例。问题是,我有点搞不懂它为什么会起作用。目前该路线只有2个简单视图。代码如下:

App=Em.Application.create();
App.Router=Ember.Router.extend({
根:Ember.Route.extend({
索引:Ember.Route.extend({
路线:“/”,
redirectsTo:'home'//当点击基本URL时,重定向到home
}),
主页:Ember.Route.extend({
路线:'/home',
连接插座:功能(路由器){
路由器.get('applicationController').connectOutlet('home');
}
}),
关于:Ember.Route.extend({
路由:'/about',
连接插座:功能(路由器){
router.get('applicationController').connectOutlet('about');
}
})
})
});
//主控制器+视图
App.ApplicationController=Ember.Controller.extend({});
App.ApplicationView=Ember.View.extend({
templateName:'应用程序',
goHome:function(){
App.router.transitiono('home');
},
goAbout:function(){
App.router.transitiono('about');
}
});
//主页
App.HomeView=Ember.View.extend({
templateName:“主页”
})
//关于页面
App.AboutController=Ember.Controller.extend({
numWidgets:45
})
App.AboutView=Ember.View.extend({
numWidgetsBinding:'App.aboutController.numWidgets',
templateName:“关于”
})
App.initialize();
在我的HTML中,我有两个非常简单的模板,它们的名字是“application”、“home”和“about”

所以,这一切都是可行的,看起来非常类似于所有在网上浮动的例子。伟大的但我很困惑,似乎我已经为自己实例化了一些东西,而我没有要求这样做。这是正确的吗

例如:

如何创建ApplicationController实例?

在connectOutlets函数中,它正在寻找一个名为“applicationController”的控制器。我从未创建过任何名为“applicationController”(小写字母为“a”)的东西,我只是扩展了一个控制器并将其命名为“applicationController”(大写字母为“a”)。为什么这样做有效

如何创建AboutController的实例?

我在“about”页面视图和控制器之间做了一个简单的绑定测试。在视图中,我使用变量App.aboutController.numWidgets进行绑定。我从未调用过App.AboutController.create()。那么,我怎样才能找到一个这样的例子呢?同样,它有一个小写字母(“aboutController”)。我所做的就是扩展一个控制器(并用大写字母“AboutController”命名)

一点解释就好了,就像任何普通的开发人员一样,我觉得在你不知道它为什么工作的地方使用代码是疯狂的

App.initialize()执行所有实例化和注入操作:),基于强命名约定:。当您调用xxxController.connectOutlet(选项)时,该选项也是常规选项,请参阅

希望有帮助

编辑:使用最新的主机,您不必手动调用App.initialize()。当一切就绪时,应用程序将自动初始化:)

App.initialize()执行所有实例化和注入操作:),基于强命名约定:。当您调用xxxController.connectOutlet(选项)时,该选项也是常规选项,请参阅

希望有帮助

编辑:使用最新的主机,您不必手动调用App.initialize()。当一切就绪时,应用程序将自动初始化:)