我正在尝试使用 Ember 和 Ember Data 做一些非常基本的事情。
1) 帖子属于用户;用户有很多帖子
2)在创建新的帖子表单中,我想要选择/下拉所有用户
3)当我编辑帖子(使用相同的表单)时,我想将其正确绑定(bind)回保管箱
问题:执行绑定(bind)到用户列表的下拉菜单的最佳实践是什么? 如何绑定(bind)编辑表单以再次填充下拉列表?
用户模型:
App.User = DS.Model.extend({
posts: DS.hasMany('post', {async: true}),
});
帖子模型:
App.Post = DS.Model.extend(Ember.Validations.Mixin, {
user: DS.belongsTo('user', {async: true}),
});
创建新帖子表单:
{{view Em.Select
content=users <<<<< How do I bind this.store.find("user") here?
optionValuePath='content.id'
optionLabelPath='content.name'
}}
我不明白将所选内容与用户绑定(bind)的最佳实践。
尝试 1:
*我正在使用 Ember-Form
{{em-select
property="user_id"
label="user"
prompt="Select user:"
content=controllers.users.content
optionValuePath="content.id"
optionLabelPath="content.first_name"
}}
关于保存操作:
newItem.set('user', this.store.getById('user', this.get('user_id')));
我尝试使用 user_id 作为表单的属性,并转换回用户对象以在保存时分配给帖子。然而,这种方法有点愚蠢,因为我每次保存时都会主动将 user_id 转换为用户对象。我觉得如果我进行了正确的绑定(bind),应该有一种自动完成的方法,而不是跳过圈子将属性绑定(bind)为 user_id。这也使得当我使用相同的表单编辑帖子时很难重新绑定(bind)。既然所有的关系都已经建立了,我有一种感觉,我在这里做错了什么。我认为一定有更好的方法。
谢谢!
最佳答案
截至 2014 年 9 月,Ember.Select
和 { async: true }
存在问题。他们在一起玩得不好。
myModel.get('myAsyncRel')
将返回一个 Promise,Ember.Select 无法识别 Promise,因此无法正确处理此问题。
一种解决方法是使用非异步关系。
另一种解决方法是使用如下内容:
关于ember.js - Ember 数据属于与选择下拉 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24707806/