繁体   English   中英

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

[英]backbone.js take different action based on result of ajax request

我有一个骨干应用程序从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可能需要检查某种标志,以确定它是否实际呈现目录,或只是一个特定文件。

有什么想法可以更好地处理这个问题吗?

好的,在仔细阅读评论和理解您的域名之后,我建议采用以下方法:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM