在我的App.NodesIndexController
我做的事情如下:
destroyAllRecords: function () {
var _this=this;
Bootstrap.ModalPane.popup({
heading: 'Warning',
message: 'Are you sure you want to delete all nodes?',
primary: 'Ok',
secondary: 'Cancel',
showBackdrop: true,
callback: function(opts, event) {
if (opts.primary) {
_this.forEach(function(node) {
console.log('Deleting node %o', node);
node.deleteRecord();
});
var store = _this.get('store').commit();
store.commit();
store.on('didDelete', toggleMessageTray.bind(this, 'All nodes have been successfully deleted'));
}
}
});
}
但是我实际上不知道怎么听“商店已经更新”的事件。我不想听取单个nodes
didDelete
事件,而是听取执行提交后触发的全局存储事件。
三个问题:
答案 0 :(得分:1)
首先是好问题!让我试着给你一个自以为是的答案。
有这样的事件吗?
据我所知,商店里很难听到这样的事件。
商店活动在哪里定义?我没有看到有关它的文档(这是我知道的关于商店的唯一文档)
由于ember-data尚未准备好生产,唯一真实的事实是源代码和内联注释。但通常在持续更改后端并根据您的设置所涉及的类,Store
,RESTAdapter
和JSONSerializer
,看看那里,您可以扩展所有这些让他们按你的意愿工作的课程。
是否有更好的方法来删除所有记录,而不是在循环中删除它们中的每一个?
是和否,通过在适配器上定义bulkCommit
到true
,只会使用所有记录的哈希值对后端进行一次调用,但仅创建记录的情况(感谢@MilkyWayJoe纠正我,请参见下面的评论),但这显然表明你的后端可以处理它,如果这样做,当然可以提高性能。
恕我直言你最好通过扩展默认RESTAdapter
并编写自己的适配器并挂钩到方法didDeleteRecords
,因为当删除所有记录时,适配器会调用此方法。
所以,我希望我的回答可以帮助你做出正确的选择 - 这意味着使用ember-data和编写自己的适配器,或者使用普通的ajax
调用来处理所有服务器的东西:
App.IndexRoute = Ember.Route.extend({
model: function() {
return $.getJSON(...);
}
});
如果您决定放弃使用ember数据,请首先查看discourse.org,repo here的应用内部版本。它的构建没有余烬数据,可以作为一个看待事情如何完成的好地方。另外值得一提的是这个blog post详细介绍了discourse.org如何在没有余烬数据的情况下驱动它的网站。