Sencha Touch 2:从 Ext.Msg.confirm 中调用控制器功能
Posted
技术标签:
【中文标题】Sencha Touch 2:从 Ext.Msg.confirm 中调用控制器功能【英文标题】:Sencha Touch 2: Call controller function from within Ext.Msg.confirm 【发布时间】:2012-05-24 10:42:22 【问题描述】:我刚刚开始使用 Sencha Touch 2,之前从未使用过 Sencha Touch 1.x。我刚刚完成了本教程(这是迄今为止我发现的最好的入门教程)http://miamicoder.com/2012/how-to-create-a-sencha-touch-2-app-part-1/,现在我想继续扩展这个 Notes 应用程序。
我有一个控制器和 2 个视图、一个列表视图和一个编辑视图。在编辑视图中,我希望能够删除当前记录。删除功能在控制器中。点击删除按钮后,我想显示一个确认对话框(“您确定要删除...?”)。用户按yes后,应该调用delete函数。
现在我的问题是:如何从 Ext.Msg.confirm 中调用控制器删除功能?
这是我的代码的相关 sn-ps。如果缺少重要的东西,请告诉我。
请参阅“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');
);
【问题讨论】:
【参考方案1】:当你进入Ext.Msg的回调函数时,作用域从控制器作用域变为全局作用域(窗口),所以你必须将它设置为confirm方法的参数:
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
【讨论】:
您好,感谢您的回答,但我认为您误解了。 onDeleteNoteCommand 事件被正常调用。在“onDeleteNoteCommand”中,我显示了一个确认框。在那里我想调用另一个控制器函数。希望这很清楚。 你只需要添加“this”作为confirm方法的第四个参数:) 哦,谢谢! :-) 如此简单,但我无法弄清楚,即使这里有文档:dev.sencha.com/deploy/ext-1.1.1/docs/output/Ext.MessageBox.html 现在我知道我应该看看 Ext.MessageBox 的公共方法。有范围!以上是关于Sencha Touch 2:从 Ext.Msg.confirm 中调用控制器功能的主要内容,如果未能解决你的问题,请参考以下文章
将 Sencha Architect 项目从 Sencha Touch v2.0.x 更新到 Sencha Touch 2.1.x
无法使用 sencha cmd 3.1.2.342 从 Sencha touch 项目生成 android apk