我有一个主干应用程序,该应用程序从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故障。