我是 ember.js 新手,正在尝试在 ember.js 中重写项目的 CRUD 页面。但是我遇到了一个关于 Ember.Select 的问题。
脚步:
- 在创建页面上,有一个 DropDown 控件,其内容是从服务器端获取的。
- 用户单击提交按钮后,将调用操作“保存”。我在“保存”操作中添加了一个断点来观察 distributiontarget.get('serviceDataModel')。
- 如果我不单击下拉框,则 distributiontarget.get('serviceDataModel') 的值未定义。如果我单击下拉控件并选择一个,则 distributiontarget.get('serviceDataModel') 的值是 url 的值。
我认为原因是从服务器返回数据后没有为 Ember.Select 设置默认值。但我找不到设置默认值的方法。 Ember Select引入了设置默认值的方法。但是 this.store.find('distribution') 会返回一个承诺。我们怎样才能得到第一个对象?此外,当我要在编辑页面上工作时,如何在 DropDown 中选择一个项目?
APP.DistributiontargetsCreateController= Ember.ObjectController.extend({
distributions: function() {
return this.store.find('distribution');
}.property(),
actions: {
save: function(distributiontarget) {
..............
debugger;
}
}
});
APP.Distribution = DS.Model.extend({
name: attr(),
url: attr()
});
APP.Distributiontarget = DS.Model.extend({
organizationId : attr('string'),
name : attr('string'),
deliveryType : attr('string'),
host : attr('string'),
baseDir : attr('string'),
username : attr('string'),
password : attr('string'),
serviceDataModel : attr('string')
});
<form>
<div class="control-group required">
<label class="control-label">Username</label>
<div class="controls">
{{ view Ember.TextField valueBinding="username" }}
</div>
</div>
..................
<div class="control-group required">
<label class="control-label">Default Data Model</label>
<div class="controls">
<span>
{{view Ember.Select
content=distributions
optionValuePath="content.url"
optionLabelPath="content.name"
valueBinding="serviceDataModel"
}}
</span>
</div>
</div>
<div class="form-actions">
<button type="submit" {{action save this}}> Save Distribution</button>
</div>
</form>
服务器返回的数据:
{
"distributions" : [ {
"name" : "Test One",
"url" : "http://192.168.204.164",
"id" : "1"
}, {
"name" : "Test Two",
"url" : "http://192.168.204.166",
"id" : "2"
}
}