2014-04-24 20 views
1

我试图向Ember数据存储添加新记录,并且它预计会立即显示。花了几个小时试图找出为什么它不显示,并发现,传递参数到Ember数据store.find阻止它。Ember数据带参数的“查找”阻止显示新记录

所以此代码的工作:

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

有被显示出来,预计在表的底部一个新的记录。

而当我只添加一件事情时,参数找到查询,它停止工作。

所以这段代码打破新纪录diplaying:

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

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

新记录实际添加到灰烬的数据存储,但在表中没有显示。

回答

1

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

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

+0

我认为init()是错误的地方,并试图添加对象作为用户交互的结果。仍然不起作用:http://jsbin.com/OxIDiVU/411/edit。我的用例是创建对象并将其传递给模态窗体,而无需转换到“新”控制器或类似的东西。 –

+0

您仍在使用参数调用'find',这意味着数组不会因更改而更新。改变你的模型钩子只是返回'this.store.find('flag')',它会工作。 – GJK

+0

使用参数查找正是我所需要的。无法更改,因为在我的用例中,参数是日期,服务器返回特定日期的数据子集。 –