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