【问题标题】:Ember Data 'find' with parameters prevent new record from displaying带有参数的 Ember 数据“查找”阻止显示新记录
【发布时间】:2014-04-24 11:04:39
【问题描述】:

我正在尝试将新记录添加到 Ember 数据存储区,它预计会立即显示。花了几个小时试图弄清楚为什么它不显示,并发现将参数传递给 Ember Data store.find 会阻止它。

所以这段代码有效:

App.FlagsRoute = Ember.Route.extend({
  model: function(params) {
    return this.store.find('flag');
  }
});

App.FlagsController = Ember.ArrayController.extend({
  init: function() {
    this.store.createRecord('flag');
  }
});

JSBin:http://jsbin.com/OxIDiVU/409/edit

正如预期的那样,表格底部显示了一条新记录。

当我只添加一件事,“查找”查询的参数时,它会停止工作。

所以这段代码打破了新的显示记录:

App.FlagsRoute = Ember.Route.extend({
  model: function(params) {
    return this.store.find('flag', params);
  }
});

JSBin:http://jsbin.com/OxIDiVU/407/edit

新记录实际上已添加到 Ember 数据存储中,但未显示在表格中。

【问题讨论】:

    标签: ember.js ember-data


    【解决方案1】:

    您的问题是您正在控制器的 init 函数中创建记录。你的路由的model 钩子在你的控制器第一次被实例化之前被调用,所以它没有找到记录,因为它不存在。第一个有效,因为在没有参数的情况下调用 find 方法会返回一个数组,该数组会随着新记录的添加而更新。使用参数调用它不会这样做。

    无论如何,您的init 函数是一个糟糕的创建记录的地方。您不应该在该函数中处理任何类型的持久状态。理想情况下,记录应该在运行时在控制器中创建,作为用户交互的结果。如果您向我们提供有关您的用例以及您希望如何创建新标志的更多信息,我可以为您提供更多帮助。

    【讨论】:

    • 我认为 init() 是错误的地方,并尝试添加对象作为用户交互的结果。仍然不起作用:jsbin.com/OxIDiVU/411/edit。我的用例是创建对象并将其传递给模态形式而不转换到“新”控制器或类似的东西。
    • 您仍在使用参数调用find,这意味着数组不会随着更改而更新。将您的模型挂钩更改为仅返回 this.store.find('flag') 即可。
    • 用参数查找正是我所需要的。无法更改,因为在我的用例中,参数是日期,服务器返回特定日期的数据子集。
    • 嗯,Ember-Data 确实无法知道新创建的记录是否适合您的查询(至少在没有一些非常复杂的逻辑的情况下不会)。当您知道已添加新商品时,您只需要重新查询商店即可。
    • 这似乎是重点。实际上,我不需要复杂的逻辑。只是用某种方式说 Ember:“将它添加到收藏中,不在乎它是否不适合”。作为一种解决方法,我将使用单独显示的新集合:jsbin.com/OxIDiVU/419/edit
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多