我刚开始使用Sencha Touch 2,之前我从未使用过Sencha Touch 1.x。我刚刚完成了本教程(这是迄今为止我发现的最好的入门教程)http://miamicoder.com/2012/how-to-create-a-sencha-touch-2-app-part-1/,现在我想继续扩展这个Notes应用程序。
我有一个控制器和2个视图,一个列表视图和一个编辑视图。在编辑视图中,我希望能够删除当前记录。删除功能在控制器中。点击删除按钮后,我想显示一个确认对话框(“你确定要删除......?”)。用户按“是”后,应调用删除功能。
现在我的问题是:如何在Ext.Msg.confirm中调用控制器删除功能?
以下是我的代码的相关摘要。如果遗漏了重要的事情,请告诉我。
请参阅“onDeleteNoteCommand”功能。 “this.someFunction”显然不起作用,因为“this”是一个DOMWindow。
Ext.define('TestApp2.controller.Main', {
extend: 'Ext.app.Controller',
config: {
refs: {
noteEditorView: 'noteeditorview'
},
control: {
noteEditorView: {
deleteNoteCommand: 'onDeleteNoteCommand',
}
}
},
onDeleteNoteCommand: function() {
console.log('onDeleteNoteCommand');
var noteEditor = this.getNoteEditorView();
var currentNote = noteEditor.getRecord();
Ext.Msg.confirm(
"Delete note?",
"Do you reall want to delete the note <i>"+currentNote.data.title+"</i>?",
function(buttonId) {
if(buttonId === 'yes') {
//controller functions!! how to call them?
this.deleteNote(currentNote);
this.activateNotesList();
}
}
);
},
deleteNote: function(record) {
var notesStore = Ext.getStore('Notes');
notesStore.remove(record);
notesStore.sync();
},
activateNotesList: function() {
Ext.Viewport.animateActiveItem(this.getNotesListView(), this.slideRightTransition);
},
slideLeftTransition: { type: 'slide', direction: 'left' },
slideRightTransition: { type: 'slide', direction: 'right' },
launch: function() {
this.callParent();
Ext.getStore('Notes').load();
console.log('launch main controller');
},
init: function() {
this.callParent();
console.log('init main controller');
}
});
答案 0 :(得分:4)
当您输入Ext.Msg的回调函数时,范围会从控制器范围更改为全局范围(窗口),因此您必须将其设置为确认方法的参数:
Ext.Msg.confirm(
"Delete note?",
"Do you reall want to delete the note <i>"+currentNote.data.title+"</i>?",
function(buttonId) {
if(buttonId === 'yes') {
this.deleteNote(currentNote);
this.activateNotesList();
}
},
this // scope of the controller
);
有关详细信息,请查看sencha文档:http://docs.sencha.com/touch/2-0/#!/api/Ext.MessageBox-method-confirm