使用我的路线模型时,this.store.find('user')
它将自动更新,并且模板显示使用创建的新记录createRecord
。因此,以下功能可以正常工作:
路线:
model: function(){
return this.store.find('user');
}
模板:
{{#each user in model}}
{{user.username}}<br>
{{/each}}
控制器代码:
// Triggered when form submitted to create a new user
var newUser = this.store.createRecord('user', {
username: this.get('username').trim()
});
// new user shows up in template immediately after createRecord
如果我更改路线模型以使用find
模板的查询参数版本,则在执行createRecord
路线:
model: function(){
// query params version of store.find
return this.store.find('user', {enabledOnly: false, limit: 100});
}
控制器代码:
// Triggered when form submitted to create a new user
var newUser = this.store.createRecord('user', {
username: this.get('username').trim()
});
// new user does not show up in template at all
似乎这可能是一个错误,因为代码的唯一更改是从基本find('user')
版本切换到具有查询参数的版本。这是炭烬数据的预期行为吗?createRecord
使用find的查询参数版本时,为什么在调用之后模型不更新模板(即find('user', {})
)
我能够创建一个演示该问题的jsbin。
谢谢!
我正在使用以下版本:
DEBUG: -------------------------------
ember.debug.js:5197DEBUG: Ember : 1.11.1
ember.debug.js:5197DEBUG: Ember Data : 1.0.0-beta.16.1
ember.debug.js:5197DEBUG: jQuery : 1.11.3
ember.debug.js:5197DEBUG: Ember Simple Auth : 0.8.0-beta.2
ember.debug.js:5197DEBUG: -------------------------------
认为这是我在Ember-Data的GitHUB页面上发布的错误。提供的答案是这是预期的行为。这是wecc的完整回复(谢谢!)
使用store.find(type,query)不会返回实时RecordArray,因此您描述的行为是正确的。
您应该可以改为使用store.filter(type,query,filter)(docs)。
store.find(type,query)不使用新创建的记录更新的原因是查询只是发送到服务器,ED无法知道新记录是否“匹配”该查询。有时查询可能是一个简单的过滤器,例如{isUnread:true},但也可能是类似{的东西,因为:'2015-05-10 10:51'}。另一方面,ED使用store.filter(type,query,filter),同时传递查询和过滤器回调函数,ED可以将查询传递到服务器,并在所有新记录上使用filter函数,以了解是否将其包括在是否直播RecordArray。
这是答案的链接:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句