当我的路线模型使用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')
切换到具有查询参数的版本。这是ember数据的预期行为吗?为什么在使用查询的查询参数版本时调用createRecord
后模型不会更新模板(即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: -------------------------------
答案 0 :(得分:4)
认为这是我在Ember-Data的GitHUB页面上发布的错误。提供的答案是这是预期的行为。以下是wecc的完整回复(谢谢!)
使用store.find(type,query)不会返回实时的RecordArray 你描述的行为是正确的。
你应该可以使用store.filter(类型,查询,过滤器)(docs) 代替。
store.find(类型,查询)没有用新更新的原因 创建的记录是查询只是发送到服务器,没有 ED知道新记录是否“匹配”该查询的方式。有时 查询可能是一个简单的过滤器,如{isUnread:true},但它可以 也像{since:'2015-05-10 10:51'}。运用 另一方面,store.filter(类型,查询,过滤器)传递两者 查询和过滤回调函数,ED可以将查询传递给服务器 并在所有新记录上使用过滤功能来了解它是否是 是否包含在现场RecordArray中。
以下是答案的链接: