如何在Ember.js中创建自定义事件或组织异步行为?
在我的控制器中,当从两个表中添加/删除行时,我会更新一些可视索引。出于日志记录的目的,我需要将这些更改发布到服务器。由于有一个观察者,这些更改发生在数据更改之后,但是我想在更改之后通知服务器。请参见下面的“afterIndexesAreUpdated”伪事件。如果我将其更改为如何在Ember.js中创建自定义事件或组织异步行为?,ember.js,Ember.js,在我的控制器中,当从两个表中添加/删除行时,我会更新一些可视索引。出于日志记录的目的,我需要将这些更改发布到服务器。由于有一个观察者,这些更改发生在数据更改之后,但是我想在更改之后通知服务器。请参见下面的“afterIndexesAreUpdated”伪事件。如果我将其更改为resetIndexes侦听的同一个观察者,那么它将在数据实际更新之前被调用。我需要在resetIndexes完成后触发它,但我不知道该怎么做。我需要做什么?除了“afterRender”,我找不到任何处理事件的例子 res
resetIndexes
侦听的同一个观察者,那么它将在数据实际更新之前被调用。我需要在resetIndexes
完成后触发它,但我不知道该怎么做。我需要做什么?除了“afterRender”,我找不到任何处理事件的例子
resetIndexes: function() {
var index = 1;
this.get('listA').forEach(function(story) {
story.set('index', index);
index += 1;
});
this.get('listB').forEach(function(story) {
story.set('index', index);
index += 1;
});
// TODO: trigger event: afterIndexesAreUpdated
},
indexesObserver: function() {
Ember.run.once(this, this.resetIndexes);
}.observes("listA.@each", "listB.@each").on('afterRender'),
addToListB: function(story) {
var attrs = $.extend({}, story._attributes, story.get('_data'));
var oldIndex = story.get('index');
this.store.createRecord('story-b', attrs);
story.deleteRecord();
Ember.run.scheduleOnce('afterIndexesAreUpdated', function() {
var newIndex = story.get('index');
$.post("/move", { story_id: story.get('id'), position: newIndex, old_position: oldIndex }, function(data) {
}).fail(function() {
var storyName = story.get('title');
alert( "Something went wrong moving " + storyName );
});
});
},
在下次运行循环中使用
Em.Run.next
运行代码。这将确保同步所有值
Em.run.next(function() {
//Your code
});
请尝试在下一个循环中使用Em.run.nextt运行您的代码,这对我很有用,谢谢!请随意把你的评论变成回答,我会接受的。虽然我认为在“afterRender”中这样做也会奏效,但我在代码中有另一个错误:
newIndex
是在已删除的记录上计算的,而不是在由this.store.createRecord
构建的新记录上计算的。