backbone.js根据ajax请求的结果采取不同的行动

时间:2013-03-12 16:41:22

标签: javascript backbone.js

我有一个骨干应用程序从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请求来获取文件内容(即// what to do here?),但是a)直接发一个ajax请求我自己似乎没那么好,并且b)我觉得我把两个模型合二为一。现在我的DirectoryView可能需要检查某种标志,以确定它是否实际呈现目录,或只是一个特定文件。

有关处理此问题的更好方法的任何想法吗?

1 个答案:

答案 0 :(得分:2)

好的,在审核了评论并了解您的域名之后,我建议采用以下方法:

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

基于您的代码示例的旁注:不要在Model或Collection代码中操作DOM!这是MV * facepalm失败。