【问题标题】:About the relationship between view and controller in MVC paradigm, specifically Sencha Touch,关于MVC范式中view和controller的关系,特别是Sencha Touch,
【发布时间】:2012-09-30 03:43:23
【问题描述】:

我正在尝试使用 Sencha Touch 2 编写一个应用程序来帮助我记住所有这些词汇。

我正在处理列表显示一些单词的部分。我希望列表视图能够咨询笔记本控制器,以便它可以知道每个单词是否已经在笔记本中,这样它就可以相应地为每个单词显示“添加到笔记本”或“从笔记本中删除”按钮。

我只是想知道让视图向控制器发起请求是否是一种好习惯。在 Objective-C 中工作时,似乎可以通过将控制器设置为视图的委托来完成此操作。那么 Sencha Touch 中是否有等效的方法?

【问题讨论】:

  • 在 Touch / ExtJS 中,控制器应该只处理视图上的事件。仅将它们用作视图的助手......将事件处理程序移动到的地方。
  • @NeilMcGuigan 那么,您能否就我所描述的这个特殊场景给我一些建议?我是否应该在商店中传递它是否在笔记本中的信息?非常感谢!
  • 我发现最好先尝试使用视图中的代码,然后将其移至控制器(就在您刚开始时)

标签: javascript model-view-controller sencha-touch sencha-touch-2


【解决方案1】:

Sencha MVC 只是一个指南,其结构并未严格执行。例如,您可以通过将所有事件侦听器放在视图中来创建没有控制器的应用程序。或者,您可以只维护 1 个控制器文件来处理您的所有视图。这取决于你。

听起来您正在尝试检查 ListStore 的内容是否具有已在 Notebook 存储中的值。我要做的是在 ListStore 中创建一个“假”列,根据 Notebook 存储检查其值。

Ext.create('Ext.data.ListStore', {
   ...
   fields: [
      ... (other fields) ...
      {
         name: 'isInNotebook',
         convert: function(value, record) {
            return this.verifyInNotebook(record.get('fieldToVerify'));
         }
      }
   ],
   verifyInNotebook: function(verifyValue) {
       var notestore = Ext.getStore('NotebookStore');
       return notestore.FindExact(verifyValue);
   }
}

然后在您的视图中,您将根据列“isInNotebook”的值来决定显示哪个按钮,该列是一个虚拟生成的列。

我希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2015-05-14
    • 1970-01-01
    • 2012-03-03
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    • 1970-01-01
    • 2013-01-16
    • 1970-01-01
    相关资源
    最近更新 更多