1

我刚刚开始使用 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');
}
});
4

1 回答 1

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

于 2012-05-24T11:11:14.760 回答