Ember.js setupController和声明a<;之间有什么区别;名称>;控制器
我在Ember.js官方教程中看到许多令人困惑的例子 我不喜欢的一个例子是:Ember.js setupController和声明a<;之间有什么区别;名称>;控制器,ember.js,Ember.js,我在Ember.js官方教程中看到许多令人困惑的例子 我不喜欢的一个例子是: App.ApplicationRoute = Ember.Route.extend({ setupController: function(controller) { controller.set('title', "Hello world!"); } }); App.ApplicationController = Ember.Controller.extend({ appNa
App.ApplicationRoute = Ember.Route.extend({
setupController: function(controller) {
controller.set('title', "Hello world!");
}
});
App.ApplicationController = Ember.Controller.extend({
appName: 'My First Example'
});
据我所知,我本可以这样写:
App.ApplicationController = Ember.Controller.extend({
appName: 'My First Example',
title: 'Hello world!'
});
并从路由中删除设置控制器
使用
setupController
的目的/好处是什么?setupController
主要用于动态设置某些控制器上下文。在您的示例中,如果标题始终是“Hello world!”,则可以在类声明中设置它
默认情况下,setupController
将controller
的model
属性设置为从路由的model
钩子返回的值
您还可以将其设置为,例如,设置另一个控制器的模型,或设置一些依赖于模型的初始控制器状态
例如,假设您具有以下各项:
// Model
App.Post = DS.Model.extend({
title: DS.attr('string'),
text: DS.attr('string'),
autoEdit: DS.attr('string')
});
// Controller
App.PostController = Ember.ObjectController.extend({
isEditing: null,
toggleEdit: function() { this.toggleProperty('isEditing'); }
});
模板:
<a href="#" {{action 'toggleEdit'}}>Toggle edit mode</a>
{{#if isEditing}}
{{input type="text" value=title placeholder="Title"}}
{{textarea type="text" value=text placeholder="Text"}}
{{else}}
<h1>{{title}}<h1>
<article>{{text}}</article>
{{/if}}
所以基本上,它是用来“初始化”控制器的(设置模型和默认状态)。我不太明白为什么在类声明的控制器中不能处理动态上下文,你能给我一个例子吗?因为当控制器实例化时,最初没有模型,因此,如果取决于模型属性,则无法正确设置某些默认状态。我很高兴看到一个示例,我很难理解我是Ember的新手。我在回答中添加了一个示例,说明了
setupController
可以用于什么。请注意,isEditing
不在模型中(不需要持久化),在控制器上i编辑
仅保存当前控制器的某些状态,即编辑模式是打开还是关闭。您链接到的示例只需更改一些模型属性,当然不涉及控制器状态。
App.PostRoute = Ember.Route.extend({
setupController: function(controller, model) {
this._super(controller, model);
if (model.get('autoEdit')) {
controller.set('isEditing', true);
}
}
});