在我的ember应用程序中,我在模板中定义了一个这样的select元素:
{{view Ember.Select
content=greetings
optionValuePath="content.id"
optionLabelPath="content.code"
value=selectedGreeting
selection=selectedGreeting
prompt="Please choose"}}
此页面的控制器(用于创建和编辑表单的共享表单和控制器)如下所示:
greetings: [
{code: "Mr.", id: 1},
{code: "Mrs.", id: 2}
],
selectedGreeting: null,
actions: {
save: function(){
var person = this.get('model');
if (person == null || person.id == undefined)
{
// create mode
var greeting = this.selectedGreeting.id;
// ....
var newPerson = this.get('store').createRecord('person',{
greeting: greeting,
// ..
});
newPerson.save();
this.transitionToRoute('index');
}
else
{
// edit mode
person.set('greeting', this.selectedGreeting.id);
person.save();
}
}
}
这在创建新人时非常有用,但在打开现有人时,选择框会显示promt而不是保存的值(我真的必须使用jQuery吗?)。
此外,我认为必须有一种更简单的方法来使用else分支中的选定值更新现有模型,因为其他属性会自动修改。
任何建议都会受到赞赏,不幸的是,Ember的文档在这种情况下没有太大帮助。
答案 0 :(得分:1)
Ember.Select
视图有很多怪癖。事实上,如果我没记错的话,我在Github上看到了一个问题就是重写整个事情。目前,我假设prompt
属性优先于selection
属性。为了解决这个问题,我只想在模板中使用条件。
{{#if model}}
{{view Ember.Select ... value=selectedGreeting}}
{{else}}
{{view Ember.Select ... prompt='Please Choose'}}
{{/if}}
此外,您的第二个问题,如果我理解正确,您应该能够使用selection=model.greeting
将选择值绑定到模型属性。如果你使用上面的模板,你可以这样做,它只适用于前者,而不适用于后者。
答案 1 :(得分:1)
我使用以下方法修复了它:
{{view Ember.Select
content=greetings
optionValuePath="content.id"
optionLabelPath="content.code"
value=model.greeting
prompt="Please select"
}}
这有两种方式 - 从模型加载数据并将数据保存到模型。提示不会干扰我所经历的价值。