如何在Ember.js中创建自定义事件或组织异步行为?

如何在Ember.js中创建自定义事件或组织异步行为?,ember.js,Ember.js,在我的控制器中,当从两个表中添加/删除行时,我会更新一些可视索引。出于日志记录的目的,我需要将这些更改发布到服务器。由于有一个观察者,这些更改发生在数据更改之后,但是我想在更改之后通知服务器。请参见下面的“afterIndexesAreUpdated”伪事件。如果我将其更改为resetIndexes侦听的同一个观察者,那么它将在数据实际更新之前被调用。我需要在resetIndexes完成后触发它,但我不知道该怎么做。我需要做什么?除了“afterRender”,我找不到任何处理事件的例子 res

在我的控制器中,当从两个表中添加/删除行时,我会更新一些可视索引。出于日志记录的目的,我需要将这些更改发布到服务器。由于有一个观察者,这些更改发生在数据更改之后,但是我想在更改之后通知服务器。请参见下面的“afterIndexesAreUpdated”伪事件。如果我将其更改为
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
构建的新记录上计算的。