0

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

这样做的一个好的骨干惯用方式是什么?现在在我称之为目录模型的解析函数中,我正在考虑做这样的事情:

  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 请求来获取这里的文件内容(即 at // what to do here?),但是 a) 自己直接发出 ajax 请求似乎不太好,b) 我觉得我正在混合在一起两个模型合二为一。现在我的 DirectoryView 可能需要检查某种标志来判断它是否实际呈现一个目录,或者只是一个特定的文件。

关于更好的处理方法的任何想法?

4

1 回答 1

2

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

  • 创建一个代表文件系统节点的 FSEntry 模型(如果您愿意,可以使用 inode)。关键在于可以代表目录或文件
  • FSEntry 应该有一个type字符串属性,可以是“目录”、“文件”、“符号链接”等
  • 基本的 fsEntry.fetch() 应该只加载元数据,包括type字段。
  • 渲染它的视图可以响应模型事件而渲染。基于模型实例的type,适当地渲染(或者如果你愿意,可以为视图的主体换一个不同的模板)
  • 如果type是“文件”,则让视图调用 fsEntry.fetchContent() 并响应相应的change:content事件以呈现文件内容
  • 您可以稍后将逻辑添加到模型中以缓存content数据,并且如果缓存中有新数据,则不会重新获取它,但这是您应该在所有功能正确后才添加的优化。

基于您的代码示例的旁注:不要在模型或集合代码中操作 DOM!这是 MV* facepalm 故障。

于 2013-03-12T17:01:50.327 回答