我正在尝试使用ember进行路由,并有一个有效的例子.问题是,我有点困惑为什么它的工作原理.目前这条路线只有2个简单的视图.这是代码:
App = Em.Application.create();
App.Router = Ember.Router.extend({
root: Ember.Route.extend({
index: Ember.Route.extend({
route: '/',
redirectsTo: 'home' //when hitting the base URL, redirect to home
}),
home: Ember.Route.extend({
route: '/home',
connectOutlets: function(router) {
router.get('applicationController').connectOutlet('home');
}
}),
about: Ember.Route.extend({
route: '/about',
connectOutlets: function(router) {
router.get('applicationController').connectOutlet('about');
}
})
})
});
//Main controller + view
App.ApplicationController = Ember.Controller.extend({});
App.ApplicationView = Ember.View.extend({
templateName: 'application',
goHome: function(){
App.router.transitionTo('home');
},
goAbout: function(){
App.router.transitionTo('about');
}
});
// Home page
App.HomeView = Ember.View.extend({
templateName: 'home'
})
// About page
App.AboutController = Ember.Controller.extend({
numWidgets: 45
})
App.AboutView = Ember.View.extend({
numWidgetsBinding: 'App.aboutController.numWidgets',
templateName: 'about'
})
App.initialize();
Run Code Online (Sandbox Code Playgroud)
在我的HTML中,我只有几个非常简单的模板,名称为"application","home"和"about".
所以,它一切正常,看起来非常类似于在网上浮动的所有示例.大!但是我很困惑我似乎有多少东西为我实例化,没有我要求这样做.它是否正确?
例如:
它是如何创建ApplicationController的实例的?
在connectOutlets函数中,它正在寻找一个名为"applicationController"的控制器.我从来没有创建任何名为"applicationController"的东西(小写"a"),我只是扩展了一个控制器并将其称为"ApplicationController"(带有大写"A").为什么这样做?
它是如何创建AboutController的实例的?
我在"about"页面视图和控制器之间进行了简单的测试绑定.在视图中,我绑定变量'App.aboutController.numWidgets'.我从未调用过App.AboutController.create().那么如何准备好与我交谈呢?同样,它有一个小写字母("aboutController").我所做的只是扩展一个控制器(用大写字母命名 - "AboutController")
一点点解释会很棒,就像任何普通的开发人员一样,我觉得使用代码而你不知道为什么它的工作是疯了!
App.initialize();完成所有实例化和注入的东西:),基于强大的命名约定:Ember命名/大写约定.当您调用xxxController.connectOutlet(options)时,该选项也是常规的,请参阅关于emberjs中命名约定的混淆
希望有所帮助.
编辑:使用最新的master,您不必手动调用App.initialize().一切就绪后,应用程序自动初始化:)
| 归档时间: |
|
| 查看次数: |
505 次 |
| 最近记录: |