【问题标题】:Ember Data: CreateRecord not updating model when using store.find with query paramsEmber 数据:使用带有查询参数的 store.find 时,CreateRecord 不更新模型
【发布时间】:2015-05-10 02:57:28
【问题描述】:

当我的路线模型使用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 数据的预期行为吗?为什么在使用 find 的查询参数版本时调用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: -------------------------------

【问题讨论】:

    标签: ember.js ember-data


    【解决方案1】:

    认为这是我在 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'}。使用 store.filter(type, query, filter) 另一方面,同时传递 查询和过滤回调函数,ED可以将查询传递给服务器 并在所有新记录上使用过滤器功能来知道它是否是 是否包含在实时 RecordArray 中。

    这是答案的链接:

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

    【讨论】:

    • 过滤器已被弃用,因此不再是有效答案。
    • @Epirocks.. 这个问题有什么解决方案吗?我还使用 store.query 来获取一些带有 records 数组的元信息。但是我的观点没有更新,如果我添加一条新记录..
    • guides.emberjs.com/v2.6.0/routing/query-params 检查“选择完全过渡”
    猜你喜欢
    • 1970-01-01
    • 2015-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多