EmberJS中如何仅通过关联代理对象设置新关联
如何通过BelongsTo关联的Proxy对象创建并关联新模型?
我正常创建/加载了一个模型:
let contact = self.get('store').createRecord('contact');随后我获取了该模型上BelongsTo关联的address:
let address = contact.get('address');返回的
address变量是一个Proxy对象,其Promise会解析为关联模型或null。
请问:仅通过这个address代理对象,如何创建一个新的address模型并将其关联到原始的contact对象?
没问题,其实这个操作很简单,Ember的BelongsTo关联返回的Proxy对象(本质是DS.PromiseObject)已经帮我们处理了关联的绑定逻辑,你只需要通过它来设置新的Address模型即可。这里有两种靠谱的方式:
方式一:直接创建记录并赋值给Proxy的content
先创建新的Address模型实例,然后把它赋值给address Proxy对象的content属性,Ember会自动完成和Contact的关联绑定:
// 创建新的address记录 let newAddress = self.get('store').createRecord('address'); // 通过Proxy对象关联到原始contact address.set('content', newAddress);
方式二:利用Proxy的then方法(适合处理异步场景)
如果你的address Proxy还在等待Promise解析(比如从服务器加载关联数据),可以用then方法确保操作在解析后执行——当然如果当前关联的address是null,直接set也能正常生效:
address.then(currentAddress => { // 如果当前没有关联的address,就创建新的并关联 if (!currentAddress) { let newAddress = self.get('store').createRecord('address'); address.set('content', newAddress); } });
需要注意的是,完成这个操作后,Ember会自动维护关联的双向关系:如果你的Address模型定义了反向关联(比如belongsTo('contact')),这个关系也会自动更新,不需要你手动处理。
内容的提问来源于stack exchange,提问作者Meep3D
相关产品推荐
相关产品推荐

