我是 Ember JS 的新手,我正在尝试弄清楚如何创建 Ember.Select 这将允许为用户创建新的工作。
这是我的 form.handlebars 中的代码的一部分:
{{view Ember.Select viewName="job-user"
contentBinding="users"
optionLabelPath="content.name"
optionValuePath="content.id"
}}
我在 JobsNewController 中:
JP.JobsNewController = Ember.ObjectController.extend({
needs: ['users'],
users: [],
usersBinding: "controllers.users"
});
这就是我的 UsersController 的样子:
JP.UsersController = Ember.ArrayController.extend();
当我从填充了 UserController 的屏幕转到 newJob 屏幕时,它正在工作,但是当我直接转到 jobs/new 时,它无法使用数据填充 select 。如何强制 Ember 加载此选择的数据?
编辑: 我必须正确设置路线:
JP.JobsNewRoute = Ember.Route.extend( JP.JobsFormable, {
model: function() {
return JP.Job.createRecord();
},
setupController:function(controller,model) {
this._super(controller,model);
controller.set('usersForSelect', JP.User.find());
}
});
我还修改了表单:
{{view Ember.Select viewName="job-user"
contentBinding="usersForSelect"
optionLabelPath="content.name"
optionValuePath="content.id"
}}
感谢@mavilein 的提示
最佳答案
当您从 URL 访问 JobsNewRoute
时,不会填充 UsersController
。因此,将 JobsNewController
中的 users
绑定(bind)到 UsersController
内容将毫无用处,因为 UsersController
为空且未填充。
您可以通过两种方式解决这个问题,都在 JobsNewRoute
中。
第一种方法,更新您的 JobsNewRoute
以填充 UsersController
:
JP.JobsNewRoute = Ember.Route.extend({
setupController: function(controller, model) {
this.controllerFor('users').set('content', JP.User.find());
}
});
另一种方法是删除 JobsNewController.users
和 UsersController
之间的绑定(bind),只需将 JobsNewController.users
填充到 工作新路线
:
JP.JobsNewController = Ember.ObjectController.extend({
users: []
});
JP.JobsNewRoute = Ember.Route.extend({
setupController: function(controller, model) {
controller.set('users', JP.User.find());
}
});
关于在 ember 中选择不加载数据 - 有工作示例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15519121/