Ember数据:当使用带有查询参数的store.find时,CreateRecord不更新模型

时间:2015-05-10 02:57:28

标签: ember.js ember-data

当我的路线模型使用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。

  

http://jsbin.com/kilaridoso/2/edit?html,js,output

谢谢!

我使用的是以下版本:

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: -------------------------------

1 个答案:

答案 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中。

以下是答案的链接:

https://github.com/emberjs/data/issues/3057