如果这有一个令人痛苦的明显答案,我深表歉意,但我既是 JS 又是 Ember 菜鸟,我无法找到解决我认为常见情况的解决方案。本质上,我有一个带有 html/css/js 前端的多页应用程序和一个带有暴露 REST api 的 java 后端。我有 1 个 app.js 文件,我包含在所有屏幕和多个控制器中,其中一些仅适用于单个屏幕。
编辑:忘了我的问题。我的问题是如何延迟对我的服务器的用户数据查询,直到我的控制器有观察者。由于控制器存在于多个屏幕上(并不都需要它),我不想盲目地查询对象的创建,因为这会很浪费。现在我有一个hacky方法,在页面的内联脚本标签的末尾我调用populate方法。下面是我的代码目前的样子。
app.js 部分:
App = Ember.Application.create();
User = Ember.Object.extend({
username: 'empty',
fullname: 'empty user'
});
App.UserDataSource = Ember.Object.extend({
fetchMyUser: function(callback) {
$.get('ncaa/user', function(data) {
callback(User.create({
username: data.username,
fullname: data.fullname}));
});
}
});
App.userDataSource = App.UserDataSource.create();
App.UserController = Ember.Object.extend({
content: null,
populate: function() {
var controller = this;
this.get('dataSource').fetchMyUser(function(data) {
controller.set('content', data);
});
}
});
App.userController = App.UserController.create({
dataSourceBinding: Ember.Binding.oneWay('App.userDataSource')
});
Ember.run.sync();
index.html 部分
<script type="text/x-handlebars">
Welcome, {{App.userController.content.fullname}}
</script>
....other code....
<script type="text/javascript">
$(document).ready(function() {
....other code....
App.userController.populate();
});
</script>
我很确定我的第一步将是修改车把模板以扩展 Ember.View,但我想知道社区认为什么是最佳实践。另外,我尝试将所有这些都放在一个 app.js 文件中是错误的吗?如果仅在需要用户显示的屏幕上导入它,则可以查询我的控制器的创建。