2

このサンプル アプリケーションに基づいて jquery/backbone.js アプリケーションを開始し、かなり大幅に変更して独自の処理を行いましたが、MVC の概念はそのままです。これまでのところ、すべてが適切に機能しており、基本的にコンテンツ/モデル/その他を追加しているだけです。私も必要なときに。

私は基本的なファイル アップローダーを実装する必要があり、このJQuery ファイル アップロードが素晴らしいことを発見しました (車輪を再発明したくありません... なぜなら、私は「急いでいる」からです)。誰もこれを以前にやったことがありますか?これまでのところ、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">&nbsp;</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>
4

2 に答える 2

1

実際のレンダリングは main.js で行われるため、ファイルアップロードの初期化を間違った場所に配置していました (ドキュメントの読み取りまたは何かを見逃していると思います)。

リソース.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');

},
于 2012-07-18T19:13:27.977 に答える