在destroyRecord

时间:2016-06-08 20:16:45

标签: javascript ember.js ember-data

在我的Ember.js应用程序中,我有一个名为mailing-lists的控制器,其中包含一个名为mailing-lists-select的组件。邮件列表控制器将组件两个操作传递给showSelectedMailingList和mailingListDeleted。

我们希望在组件上调用这些操作时,操作应该冒泡到控制器。但是,看起来只有showSelectedMailingList操作在组件中调用时才会冒泡,而在我们在组件中调用它时,mailingListDeleted操作永远不会冒泡。

这两个操作之间的唯一区别是在destroyRecord调用之后,在组件中调用了mailingListDeleted的sendAction。这是已知问题还是我的代码中有错误?

正在使用的版本:

Ember: 1.11.2
Ember Data: 1.0.0-beta.16.1
jQuery: 1.11.3

mailing-lists.js控制器

export default Ember.Controller.extend({
  selectedId: null,

  actions: {

    showSelectedMailingList: function(id) {
      //action bubbles up, execution reaches here
      this.set('selectedId', id);
    },

    deleteMailingList: function(record) {
      //execution never reaches here (???)
      //some code
    }
  }
});

mailing-lists.hbs模板

<div>
{{#each model as |mailingList|}}
  {{mailing-lists-select-option
    mailingList=mailingList
    showSelectedMailingList='showSelectedMailingList'
    deleteMailingList='deleteMailingList'
  }}
{{/each}}
</div>

邮件列表选-option.js

export default Ember.Component.extend({
  mailingList: null,

  actions: {

    showSelectedMailingList: function(id) {
      //execution reaches here
      this.sendAction('showSelectedMailingList', id);
    },

    deleteMailingList: function(mailingList) {
      var dat = this;

      mailingList.destroyRecord().then(function() {
        //execution reaches here
        dat.sendAction('deleteMailingList', mailingList);
      });
    }
  }
});

邮件列表选-option.hbs

<li><a href="#" {{action 'showSelectedMailingList' mailingList.id}}>Show</a></li>
<li><a href="#" {{action 'deleteMailingList' mailingList}}>Delete</a></li>

1 个答案:

答案 0 :(得分:2)

由于destroyRecord()返回promise,因此可能会有一些错误导致它失败并且永远不会解析,所以then()函数永远不会被调用,因此不会调用sendAction()。 如果不是这种情况,则必须调用sendAction(),我在我的应用程序中尝试了类似的东西,它的工作原理来自destroyRecord()。