我有一个模型Currencies
。模型中的字段为name:string
和default:boolean
。
在后端,只有一个数据库中的记录可以default:true.
我希望默认情况下在Ember js中选择它。
请举例说明如何选择并使用
示例:
name: type1 default: false
name: type2 default: true
name: type3 default: false
我想生成这样的选择:
<selected>
<option>type1</option
<option selected=selected>type2</option
<option>type3</option
</selected>
Route.js
@route 'addincome', { path: 'operations/addincome' }
EmberMoney.AddincomeRoute = Ember.Route.extend
model: ->
EmberMoney.IncomeOperation.createRecord()
setupController: (controller, model) ->
controller.set('currencies', EmberMoney.Currency.find())
controller.set('content', model)
addincome.handlebars
//带有收入记录的一些输出
{{view EmberMoney.Select viewName="select"
contentBinding="controller.currencies"
optionLabelPath="content.name"
optionValuePath="content.id"
selectionBinding="controller.defaultType"}}
addincome_controller.js
EmberMoney.AddincomeController = Ember.ObjectController.extend({
setDefaultCurrency: function(){
if(this.get('currencies.isLoaded')){
this.set('defaultType', this.get('currencies').findProperty('default'));
}
}.observes('currencies.isLoaded')
})
答案 0 :(得分:0)
使用selectionBinding
进行选择,使用ComputedProperty
查找相应的项目
EmberMoney.AddincomeController = Ember.ObjectController.extend({
setDefaultCurrency: function(){
if(this.get('currencies.isLoaded')){
this.set('defaultType', this.get('currencies').findProperty('default'));
}
}.observes('currencies.isLoaded')
})
对于观察者使用isLoaded
而不是@each
的优点是每次添加货币时观察者都不会被触发,而是确保在加载整个集合后设置值,再次它
希望这有帮助
截图的
答案 1 :(得分:0)
我的回答建立在已发布的那个上。答案是使用selectionBinding
和一种聪明的方法来设置它:
{{view Ember.Select
contentBinding="controller.types"
optionLabelPath="content.name"
optionValuePath="content.id"
selectionBinding="controller.selectedCurrency"
}}
EmberMoney.IncomesController = Ember.ArrayController.extend({
selectedCurrency : null,
currenciesObserver: function(){
var currencies = this.get("currencies");
var default = currencies.findProperty("default");
if(default)
this.set("selectedCurrency", default);
}.observes('currencies.@each')
});
该解决方案如何运作?