在我的 ember 应用程序中,我在模板中定义了一个如下所示的选择元素:
{{view Ember.Select
content=greetings
optionValuePath="content.id"
optionLabelPath="content.code"
value=selectedGreeting
selection=selectedGreeting
prompt="Please choose"}}
此页面的 Controller (共享表单以及用于创建和编辑表单的 Controller )如下所示:
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();
}
}
}
这在创建一个新人时非常有效,但是当打开一个现有的人时,选择框会显示提示而不是保存的值(我真的必须使用 jQuery 来执行此操作吗?)。
此外,我认为必须有一种更简单的方法来使用 else 分支中选定的值更新现有模型,因为其他属性会自动修改。
如有任何建议,我们将不胜感激,不幸的是,Ember 的文档在这种情况下没有多大帮助。
最佳答案
Ember.Select
View 有很多怪癖。事实上,如果我没记错的话,我在 Github 上看到了一个问题,要求重写整个内容。目前,我假设 prompt
属性优先于 selection
属性。为了解决这个问题,我只需在模板中使用条件。
{{#if model}}
{{view Ember.Select ... value=selectedGreeting}}
{{else}}
{{view Ember.Select ... prompt='Please Choose'}}
{{/if}}
另外,你的第二个问题,如果我理解正确的话,你应该能够使用 selection=model.greeting
将选择值绑定(bind)到模型属性。如果您使用上面的模板,则可以使其仅适用于前者而不适用后者。
关于javascript - Ember.选择编辑表单的两种方式绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22142965/