这是我的第一个 Ember.js 应用程序。我发现的所有 Ember 示例和教程都是具有单个模型的单个控制器或具有子模型的单个模型。但是,此应用程序将两个模型(公司和用户)并排放置到单个控制器(登录)中。但是,它的效果不是很好。
它的 jsbin.com 代码位于:jsbin.com/cirah
我的设计是:登录控制器没有定义模型,但有两个公司和用户数组。两者都有一个 _selid 来指示当前选择。
window.App = Ember.Application.create({});
App.ApplicationStore = DS.Store.extend({
adapter: 'App.ApplicationAdapter',
});
App.ApplicationAdapter = DS.RESTAdapter.extend({
host: 'http://emberjs.azurewebsites.net',
headers: {
"Accept": "application/json",
}
});
App.Company = DS.Model.extend({
company: DS.attr('string')
});
App.User = DS.Model.extend({
userName: DS.attr('string'),
passwordHash: DS.attr('string'),
});
App.Router.map(function () {
this.resource("login", { path: '/login' });
});
App.IndexRoute = Ember.Route.extend({
redirect: function () {
this.transitionTo('login');
},
});
App.LoginRoute = Ember.Route.extend({
setupController: function (controller, model) {
var store = this.get('store');
controller.set('companies', store.find('company'));
controller.set('company_selid', 2);
controller.set('users', store.find('user'));
controller.set('user_selid', 3);
},
});
App.LoginController = Ember.ObjectController.extend({
companies: null,
company_selid: '2',
users: null,
user_selid: '3',
passwordHash: '',
actions: {
login: function () {
alert('login clicked');
},
},
});
登录模板包含数组的两个 Ember.Select(s)。
<div class="input-group">
<label for="company" class="input-group-addon ">Company:</label>
{{view Ember.Select
class="form-control"
content=companies
optionValuePath="content.id"
optionLabelPath="content.company"
value="company_selid"
selectionBinding="company_selid"}}
</div>
<div class="input-group">
<label for="userName" class="input-group-addon">User Name:</label>
{{view Ember.Select
class="form-control"
content=users
optionValuePath="content.id"
optionLabelPath="content.userName"
value=user_selid
selection=user_selid
}}
</div>
服务器端返回:
http://emberjs.azurewebsites.net/companies?format=json
{"companies":[
{"id":1,"company":"ABC Company"},
{"id":2,"company":"XYZ Company"}
]}
http://emberjs.azurewebsites.net/users?format=json
{"users":[
{"id":101,"userName":"Aaron","passwordHash":""},
{"id":102,"userName":"Brian","passwordHash":""},
{"id":103,"userName":"Corey","passwordHash":""},
{"id":104,"userName":"David","passwordHash":""}
]}
我的问题是:
Q1:Ember 使用单个控制器嵌入多个模型的最佳实践是什么?我想急切加载两个数组,我应该在登录模型中使用 Ember.RSVP 吗?还是我应该使用 ContainerView?
Q2:在我的代码中,两个 Ember.Select(s) 的默认选项不起作用,它始终是第一个选项,即使我在登录控制器和 setupController 中设置了两次。如何解决?
谢谢