我在表单中有一个自动完成组件。插入组件后,我运行此功能:
setSearchInput: (->
username = @get 'targetObject.user.username'
@set('searchInput', username)
).on('didInsertElement')
此情况下的targetObject是表单,可以访问与之关联的user
内容模型。此时,可能尚未加载user
。通常,这会提示Ember-Data查询服务器并返回一个promise。但是,在这种情况下,它不会返回承诺。它返回undefined。但是,如果我强制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仍然处于测试阶段,所以也许这是一个错误?还有其他人遇到过这种行为吗?
答案 0 :(得分:2)
我将假设用户在这里是一个belongsTo
异步对象(如果不是你需要显示那里有什么内容,因为我不得不猜),我要去在javascript中做(抱歉,如果我在coffeescript中这样做,它可能会让你更加困惑;)
setSearchInput: function(){
var self = this;
this.get('targetObject.user').then(function(user){
self.set('searchInput', user.get('username'));
});
}.on('didInsertElement')