在Ember.js中,我把控制器的初始化代码放在哪里?
In Ember.js Where do I put initialization code for a controller, tried routes setup controller
我一直在使用ember.js和highcharts。我发现了一些例子,但例子的简单性并没有让我理解我应该在哪里设置图表对象并渲染它们。
我已经看过了初始化式。我理解路由的作用(我认为),以及Route对象如何维护状态。
我有一个例子,并试图将我的初始化代码移动到路由setupController函数。这是一个JSFiddle http://jsfiddle.net/gregorydickson/as9dZ/
App.IndexRoute = Ember.Route.extend({
setupController: function(controller, model) {
//These do not work here?????
controller.createGraph('graph1', 'line');
controller.createGraph('graph2', 'column');
}
});
,我正在移动的代码,它不工作(你可以注释掉两个调用在路由器和取消注释它们在javascript的底部,让它运行)。
我计划在初始化器中从服务器检索json的模型,但无法通过此问题。
问题的根源:你试图在路由的模板被渲染之前渲染到DOM。
更详细:
当与DOM元素和/或视图模板(例如$('#graph1')
)交互时,你应该利用视图层。你从路由中调用一个控制器方法,控制器试图瞄准视图模板中的某些东西,但视图在控制器之后出现,模板在视图创建后呈现。
具体来说,你应该利用Ember.run
循环的Em.View
事件didInsertElement
或afterRender
钩子来处理你的模板,比如瞄准一个选择器。例外是手柄绑定,它会自动更新。
App.MyView = Em.View.extend({
doSomethingWithTheDOM: function() {
this.$().find('#graph1').setChart();
}).on('didInsertElement');
});
或:
App.MyView = Em.View.extend({
doSomethingWithTheDOM: function() {
Em.run.scheduleOnce('afterRender', this, function() {
this.$().find('#graph1').setChart();
});
}).on('willInsertElement');
});
在这种情况下,当你绑定可能会改变的数据时,我实际上会使用一个图形组件并像这样绑定内容:
{{render-graph content=someArrayOfData}}
经验法则:使用路由从存储中获取数据并将其设置为控制器的属性(默认情况下,路由的模型被设置为控制器的content
属性)。使用视图与模板交互并呈现childViews,等等。最后,使用控制器作为中间所有操作的主力(例如,属性、保存等)。
旁注:当重写核心对象方法,如setupController
,你应该调用this._super(controller, model)
(或this._super()
,如果没有参数),以确保你的Ember应用程序做的一切都是应该的。基本上_super
只是调用函数,如果你没有覆盖这个方法,这个函数就会运行。
- 在Meteor中重新初始化代码
- 在jQuery Mobile中使用pageInit()初始化代码
- 无法使用我的代码(html/js/css)初始化网络摄像头
- 在使用函数作为构造函数时,我在初始化属性时卡住了这个运算符.我的代码如下
- JS:在一行代码中初始化并推送到多维数组?创建树结构
- 是否可以在一行代码中定义和初始化JavaScript中的多维数组
- 如果我想在每次测试之前初始化数据库,如何组织代码
- 如何简化用于初始化的 jQuery 代码
- 为什么下面的代码没有初始化我的 JavaScript 对象
- 用于脚本加载的预初始化jQuery代码不起作用
- 如何重构用于初始化和更新的冗余代码
- AngularJS:初始化控制器时运行代码
- 如何使用mocha运行一些初始化代码
- 初始化插件后执行jQuery代码
- 如何用HTML代码直接初始化javascript中的变量
- 在变量初始化时运行代码
- 在Ember.js中,我把控制器的初始化代码放在哪里?
- KnockoutJS:我应该如何处理繁重的小部件初始化代码
- 新手:检查表单初始化时是否选中了单选按钮.这个代码是什么意思
- 数据表:如何在表初始化代码中放入变量