我有一个主干应用程序,该应用程序从URL读取svn文件路径,然后以“ ls”为其给出的路径。通常,它只是枚举表中ls的结果。但是我想做的是检查路径是否实际上仅对应于特定文件,在这种情况下,取回并显示文件的内容。

什么是这样做的良好主干惯用方式?现在,在我称为目录模型的parse函数中,我正在考虑执行以下操作:

  parse: function(response, options) {
    if (response.length == 1 && response[0].type == "file") {
      // what to do here?
    }
    this.get('entries').reset(response);
    $("#indicator").hide();
    $('#directory-contents').show();
    this.trigger('change');
    return {};
  },


因此,我很想提出一种Ajax请求以在此处获取文件内容(即,在// what to do here?处),但是a)我自己直接提出ajax请求似乎不太好,b)我觉得我m将两个模型混合在一起。现在,我的DirectoryView可能必须检查某种标志,以判断它实际上是在呈现目录,还是仅是一个特定文件。

有什么更好的方法来解决这个问题吗?

最佳答案

好的,在查看评论并进一步了解您的域之后,我建议采用以下方法:


创建一个代表文件系统节点的FSEntry模型(如果需要,则为inode)。关键是可以代表目录或文件
FSEntry应该具有type字符串属性,该属性可以是“目录”,“文件”,“符号链接”等
基本的fsEntry.fetch()应该只加载元数据,包括type字段。
它可以响应模型事件而呈现的视图呈现。根据模型实例的type,进行适当的渲染(或根据需要交换视图主体的其他模板)
如果type是'file',请进行视图调用fsEntry.fetchContent()并响应相应的change:content事件以呈现文件内容
以后可以向模型添加逻辑以缓存content数据,如果在缓存中有新数据则不重新获取它,但这是一种优化,只有在所有功能正确之后才应添加。


根据您的代码示例的旁注:请勿在模型或集合代码中操作DOM!这是MV * facepalm故障。

10-06 00:46