我在表单中有一个自动完成组件。插入组件后,我运行此函数:
setSearchInput: (->
username = @get 'targetObject.user.username'
@set('searchInput', username)
).on('didInsertElement')
在这种情况下,targetObject是表单,可以访问内容模型的related user
。此时,user
可能尚未加载。通常,这将提示Ember-Data查询服务器并返回承诺。但是,在这种情况下,它不会返回承诺。它返回未定义。但是,如果我强迫Ember暂停一秒钟,它将返回预期的结果:
setSearchInput: (->
window.setTimeout =>
username = @get 'targetObject.content.user.username'
@set('searchInput', username)
, 1000
).on('didInsertElement')
如果在上设置断点,也会遇到类似的情况@set('searchInput', username)
。username
将是不确定的,但是如果我@get 'targetObject.content.user.username'
在这一点上运行,它将返回预期的结果。
知道发生了什么吗?Ember-Data仍处于测试阶段,所以也许这是一个错误?还有其他人遇到过这种行为吗?
我要假设用户belongsTo
在这里是一个异步对象(如果不是,您将需要显示那里的内容,因为我不得不猜测),并且我将使用javascript(抱歉,如果我用coffeescript来做,这可能会使您更加困惑;))
setSearchInput: function(){
var self = this;
this.get('targetObject.user').then(function(user){
self.set('searchInput', user.get('username'));
});
}.on('didInsertElement')
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句