我已经基于这个sample application启动了一个jquery / backbone.js应用程序,并对它进行了相当大的修改以完成我自己的工作,但MVC概念仍然存在。到目前为止,一切正常,我基本上只是添加我的内容/模型/等。当我需要的时候。
我需要实现一个基本的文件上传器,发现这个JQuery-file-upload很棒(我不想重新发明轮子......因为,我很“急”) 。有没有人以前做过这个? 到目前为止,我已经下载了zip文件并在WampServer(PHP)上运行,它运行得很好(我阅读了设置手册)。如何在应用程序中使用/附加它(使用小部件)?你是怎么做的(我对插件没有多少经验)
代码部分:
tpl / ResourcesView.html(如果我们只从演示中获取有趣的部分):
<div class="content fixed-fixed">
<!-- The file upload form used as target for the file upload widget -->
<form id="fileupload" action="plugin/jquery-fileupload/server/php/" method="POST" enctype="multipart/form-data">
<!-- The fileupload-buttonbar contains buttons to add/delete files and start/cancel the upload -->
<div class="row fileupload-buttonbar">
<div class="span7">
<!-- The fileinput-button span is used to style the file input field as button -->
<span class="btn btn-success fileinput-button">
<i class="icon-plus icon-white"></i>
<span>Add files...</span>
<input type="file" name="files[]" multiple>
</span>
<button type="submit" class="btn btn-primary start">
<i class="icon-upload icon-white"></i>
<span>Start upload</span>
</button>
<button type="reset" class="btn btn-warning cancel">
<i class="icon-ban-circle icon-white"></i>
<span>Cancel upload</span>
</button>
<button type="button" class="btn btn-danger delete">
<i class="icon-trash icon-white"></i>
<span>Delete</span>
</button>
<input type="checkbox" class="toggle">
</div>
<!-- The global progress information -->
<div class="span5 fileupload-progress fade">
<!-- The global progress bar -->
<div class="progress progress-success progress-striped active" role="progressbar" aria-valuemin="0" aria-valuemax="100">
<div class="bar" style="width:0%;"></div>
</div>
<!-- The extended global progress information -->
<div class="progress-extended"> </div>
</div>
</div>
<!-- The loading indicator is shown during file processing -->
<div class="fileupload-loading"></div>
<br>
<!-- The table listing the files available for upload/download -->
<table role="presentation" class="table table-striped"><tbody class="files" data-toggle="modal-gallery" data-target="#modal-gallery"></tbody></table>
</form>
</div>
<!-- The template to display files available for upload -->
<script id="template-upload" type="text/x-tmpl">
{% for (var i=0, file; file=o.files[i]; i++) { %}
<tr class="template-upload fade">
<td class="preview"><span class="fade"></span></td>
<td class="name"><span>{%=file.name%}</span></td>
<td class="size"><span>{%=o.formatFileSize(file.size)%}</span></td>
{% if (file.error) { %}
<td class="error" colspan="2"><span class="label label-important">{%=locale.fileupload.error%}</span> {%=locale.fileupload.errors[file.error] || file.error%}</td>
{% } else if (o.files.valid && !i) { %}
<td>
<div class="progress progress-success progress-striped active" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0"><div class="bar" style="width:0%;"></div></div>
</td>
<td class="start">{% if (!o.options.autoUpload) { %}
<button class="btn btn-primary">
<i class="icon-upload icon-white"></i>
<span>{%=locale.fileupload.start%}</span>
</button>
{% } %}</td>
{% } else { %}
<td colspan="2"></td>
{% } %}
<td class="cancel">{% if (!i) { %}
<button class="btn btn-warning">
<i class="icon-ban-circle icon-white"></i>
<span>{%=locale.fileupload.cancel%}</span>
</button>
{% } %}</td>
</tr>
{% } %}
</script>
<!-- The template to display files available for download -->
<script id="template-download" type="text/x-tmpl">
{% for (var i=0, file; file=o.files[i]; i++) { %}
<tr class="template-download fade">
{% if (file.error) { %}
<td></td>
<td class="name"><span>{%=file.name%}</span></td>
<td class="size"><span>{%=o.formatFileSize(file.size)%}</span></td>
<td class="error" colspan="2"><span class="label label-important">{%=locale.fileupload.error%}</span> {%=locale.fileupload.errors[file.error] || file.error%}</td>
{% } else { %}
<td class="preview">{% if (file.thumbnail_url) { %}
<a href="{%=file.url%}" title="{%=file.name%}" rel="gallery" download="{%=file.name%}"><img src="{%=file.thumbnail_url%}"></a>
{% } %}</td>
<td class="name">
<a href="{%=file.url%}" title="{%=file.name%}" rel="{%=file.thumbnail_url&&'gallery'%}" download="{%=file.name%}">{%=file.name%}</a>
</td>
<td class="size"><span>{%=o.formatFileSize(file.size)%}</span></td>
<td colspan="2"></td>
{% } %}
<td class="delete">
<button class="btn btn-danger" data-type="{%=file.delete_type%}" data-url="{%=file.delete_url%}">
<i class="icon-trash icon-white"></i>
<span>{%=locale.fileupload.destroy%}</span>
</button>
<input type="checkbox" name="delete" value="1">
</td>
</tr>
{% } %}
</script>
然后,骨干部分
js / views / resources.js(渲染模板):
window.ResourcesView = Backbone.View.extend({
initialize:function () {
this.render();
$('#fileupload').fileupload();
$('#fileUpload', this.el).fileupload('option', {
url: '/resources'
});
},
render:function () {
$(this.el).html(this.template());
return this;
}
});
main.js:
var AppRouter = Backbone.Router.extend({
routes: {
"resources" : "resources"},
resources: function(){
if (!this.resourcesView) {
this.resourcesView = new ResourcesView();
}
$('#content').html(this.resourcesView.el);
this.leftMenuView.selectMenuItem('resource-link');
}
});
utils.loadTemplate(['ResourcesView' ], function() {
app = new AppRouter();
Backbone.history.start();
});
最后,我的index.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>MPact App</title>
<meta name="description" content="">
<meta name="author" content="">
<style>
body {
padding-top: 60px; /* 60px to make the container go all the way to the bottom of the topbar */
}
</style>
<link href="css/bootstrap.css" rel="stylesheet">
<link href="css/styles.css" rel="stylesheet">
<link href="css/docs.css" rel="stylesheet">
<!-- Generic page styles -->
<link rel="stylesheet" href="plugin/jquery-fileupload/css/style.css">
<!-- CSS to style the file input field as button and adjust the Bootstrap progress bars -->
<link rel="stylesheet" href="plugin/jquery-fileupload/css/jquery.fileupload-ui.css">
</head>
<body data-spy="scroll" data-target=".subnav" data-offset="50">
<div class="header"></div>
<div class="container-fluid">
<div id="left-menu" class="sidebar left"></div>
<div class="content fixed-fixed">
<div id="content" class="span12>"></div>
</div>
</div>
<script src="lib/jquery-1.7.2.min.js"></script>
<script src="lib/underscore-min.js"></script>
<script src="lib/backbone-min.js"></script>
<script src="lib/bootstrap.js"></script>
<script src="lib/backbone-min.js"></script>
<script src="js/utils.js"></script>
<script src="js/views/resources.js"></script>
<script src="js/main.js"></script>
<!-- Plugin instance-->
<script src="plugin/jquery-fileupload/js/vendor/jquery.ui.widget.js"></script>
<!-- The Templates plugin is included to render the upload/download listings -->
<script src="http://blueimp.github.com/JavaScript-Templates/tmpl.min.js"></script>
<!-- The Load Image plugin is included for the preview images and image resizing functionality -->
<script src="http://blueimp.github.com/JavaScript-Load-Image/load-image.min.js"></script>
<!-- The Canvas to Blob plugin is included for image resizing functionality -->
<script src="http://blueimp.github.com/JavaScript-Canvas-to-Blob/canvas-to-blob.min.js"></script>
<!-- Bootstrap JS and Bootstrap Image Gallery are not required, but included for the demo -->
<script src="http://blueimp.github.com/cdn/js/bootstrap.min.js"></script>
<script src="http://blueimp.github.com/Bootstrap-Image-Gallery/js/bootstrap-image-gallery.min.js"></script>
<!-- The Iframe Transport is required for browsers without support for XHR file uploads -->
<script src="plugin/jquery-fileupload/js/jquery.iframe-transport.js"></script>
<!-- The basic File Upload plugin -->
<script src="plugin/jquery-fileupload/js/jquery.fileupload.js"></script>
<!-- The File Upload file processing plugin -->
<script src="plugin/jquery-fileupload/js/jquery.fileupload-fp.js"></script>
<!-- The File Upload user interface plugin -->
<script src="plugin/jquery-fileupload/js/jquery.fileupload-ui.js"></script>
<!-- The localization script -->
<script src="plugin/jquery-fileupload/js/locale.js"></script>
</body>
</html>
答案 0 :(得分:6)
1)骨干应用程序,其视图具有文件输入:
<div class="fileUploadView">
<input id="fileUpload" name="file" type="file"/>
</div>
2)要添加插件,您的服务器上有blueimp fileupload插件javascript文件,并从您网页的<head>
或<body>
引用?我通常有一个文件夹,例如vendor / NAME,用于插件和小部件。这些包括以下所有内容:
<!-- The Iframe Transport is required for browsers without support for XHR file uploads -->
<script src="/vendor/fileUpload/js/jquery.iframe-transport.js"></script>
<!-- The basic File Upload plugin -->
<script src="/vendor/fileUpload/js/jquery.fileupload.js"></script>
<!-- The File Upload file processing plugin -->
<script src="/vendor/fileUpload/js/jquery.fileupload-fp.js"></script>
<!-- The File Upload user interface plugin -->
<script src="/vendor/fileUpload/js/jquery.fileupload-ui.js"></script>
3)为了使它看起来像您已经提供的演示并在页面中引用了jquery.fileupload-ui.css:
<link rel="stylesheet" href="/vendor/fileUpload/css/jquery.fileupload-ui.css">
4)在视图中调用render()之后,您可以这样做,假设所有必需的文件都在窗口中并且视图已经呈现:
$('#fileUpload', this.el).fileupload();
如果您拥有所有资产,那么应显示小部件。最后,您需要将其指向您的网址以接收文件上传:
$('#fileUpload', this.el).fileupload('option', {
url: '/uploadreceiver'
});
答案 1 :(得分:1)
实际渲染发生在main.js中,所以我把文件上载初始化的位置放错了(我想我会错过阅读或文档上的内容)。
resources.js:
window.ResourcesView = Backbone.View.extend({
initialize:function () {
this.render();
},
render:function () {
$(this.el).html(this.template());
return this;
}
});
main.js:
resources: function(){
if (!this.resourcesView) {
this.resourcesView = new ResourcesView();
}
$('#content').html(this.resourcesView.el);
$('#fileupload').fileupload();
$('#fileUpload', this.el).fileupload('option', {
url: '/resources'
});
this.leftMenuView.selectMenuItem('resource-link');
},