3

我在我们的网站上安装了 jquery 文件上传插件: https ://github.com/blueimp/jQuery-File-Upload/wiki/Template-Engine

然而,它使用了一种 java 脚本模板语言,该语言曾一度与 jquery 绑定,但已被停止并从 jquery 中删除。与我一起工作的人希望我删除插件的模板引擎部分并用直接的 javascript 编写它。由于不支持模板语言,他不喜欢在我们的代码中使用它。

我在这里找到了文档讨论在直接 JS 中创建自己的模板引擎的地方,我想这是我需要做的。

https://github.com/blueimp/jQuery-File-Upload/wiki/Template-Engine

我不确定了解更多有关模板语言的信息是否对我也有帮助,我已经查看了一些关于模板语言的网站。

我现在正在度假,但是当我一周后回来时,我需要开始处理这个问题。

我写了相当多的 javascript 和 jquery 的东西,但我并不总是对所有的习语都非常熟悉,在某些情况下我会复制和粘贴代码示例。

这是您自己的模板引擎的代码示例。我猜它设置了回调..我基本上必须剪切和粘贴它,看看它是否有效。我确实尝试过,但最初它对我不起作用。

$('#fileupload').fileupload({
    uploadTemplateId: null,
    downloadTemplateId: null,
    uploadTemplate: function (o) {
        var rows = $();
        $.each(o.files, function (index, file) {
            var row = $('<tr class="template-upload fade">' +
             '<td class="preview"><span class="fade"></span></td>' +
             '<td class="name"></td>' +
             '<td class="size"></td>' +
             (file.error ? '<td class="error" colspan="2"></td>' :
                    '<td><div class="progress">' +
                        '<div class="bar" style="width:0%;"></div></div></td>' +
                        '<td class="start"><button>Start</button></td>'
              ) + '<td class="cancel"><button>Cancel</button></td></tr>');
            row.find('.name').text(file.name);
            row.find('.size').text(o.formatFileSize(file.size));
            if (file.error) {
               row.find('.error').text(
                  locale.fileupload.errors[file.error] || file.error
               );
            }
            rows = rows.add(row);
         });
        return rows;
    },
   downloadTemplate: function (o) {
      var rows = $();
      $.each(o.files, function (index, file) {
        var row = $('<tr class="template-download fade">' +
            (file.error ? '<td></td><td class="name"></td>' +
                '<td class="size"></td><td class="error" colspan="2"></td>' :
                    '<td class="preview"></td>' +
                        '<td class="name"><a></a></td>' +
                        '<td class="size"></td><td colspan="2"></td>'
            ) + '<td class="delete"><button>Delete</button> ' +
                '<input type="checkbox" name="delete" value="1"></td></tr>');
        row.find('.size').text(o.formatFileSize(file.size));
        if (file.error) {
            row.find('.name').text(file.name);
            row.find('.error').text(
                locale.fileupload.errors[file.error] || file.error
            );
        } else {
            row.find('.name a').text(file.name);
            if (file.thumbnail_url) {
                row.find('.preview').append('<a><img></a>')
                    .find('img').prop('src', file.thumbnail_url);
                row.find('a').prop('rel', 'gallery');
            }
            row.find('a').prop('href', file.url);
            row.find('.delete button')
                .attr('data-type', file.delete_type)
                .attr('data-url', file.delete_url);
        }
        rows = rows.add(row);
    });
    return rows;
}

});


这是我在文件加载完成后调用的一些工作代码。这是否需要与上述代码结合才能工作?

为什么这段代码是一种形式为 $(function() { $("#fileupload").fileupload(){ ...

另一个代码示例不在匿名函数中。也许这并不重要?

$(function () {
  $('#fileupload').fileupload({
    dataType: 'json',
    done: function (e, data) {                          
         var str = "<h4>" + data.result.name + '  -  ' + data.result.text_status + "</h4>";
         console.log(str);
         <% if @ie %>
           data.context.html(str);
           $("#files_tbody").append("<tr>" + str + "</tr>");
         <% else %>
           data.context.html(str);
         <% end %>
    }
  });
});

我尝试将这两个代码段分开,如图所示,但我的上传不起作用,我尝试将它们组合如下,但这也不起作用..任何关于我缺少什么或在哪里查看的建议将不胜感激..

使用下面的代码块,我在 firebug 中收到文件加载错误:

TypeError: $("#fileupload").fileupload 不是函数 downloadTemplate: function (o) {

并且:

TypeError: document.getElementById(a) is null ...urn{"\n":"\n","\r":"\r","\t":"\t"," ":" " }[a]||"\"+a;if(c)return c==="="?"'+...

$('#fileupload').fileupload({
   dataType: 'json',
    done: function (e, data) {                          
         var str = "<h4>" + data.result.name + '  -  ' + data.result.text_status + "</h4>";
         console.log(str);
         <% if @ie %>
           data.context.html(str);
           $("#files_tbody").append("<tr>" + str + "</tr>");
         <% else %>
           data.context.html(str);
         <% end %>
    }
uploadTemplateId: null,
downloadTemplateId: null,
uploadTemplate: function (o) {
    var rows = $();
    $.each(o.files, function (index, file) {
        var row = $('<tr class="template-upload fade">' +
            '<td class="preview"><span class="fade"></span></td>' +
            '<td class="name"></td>' +
            '<td class="size"></td>' +
            (file.error ? '<td class="error" colspan="2"></td>' :
                    '<td><div class="progress">' +
                        '<div class="bar" style="width:0%;"></div></div></td>' +
                        '<td class="start"><button>Start</button></td>'
            ) + '<td class="cancel"><button>Cancel</button></td></tr>');
        row.find('.name').text(file.name);
        row.find('.size').text(o.formatFileSize(file.size));
        if (file.error) {
            row.find('.error').text(
                locale.fileupload.errors[file.error] || file.error
            );
        }
        rows = rows.add(row);
    });
    return rows;
},
downloadTemplate: function (o) {
    var rows = $();
    $.each(o.files, function (index, file) {
        var row = $('<tr class="template-download fade">' +
            (file.error ? '<td></td><td class="name"></td>' +
                '<td class="size"></td><td class="error" colspan="2"></td>' :
                    '<td class="preview"></td>' +
                        '<td class="name"><a></a></td>' +
                        '<td class="size"></td><td colspan="2"></td>'
            ) + '<td class="delete"><button>Delete</button> ' +
                '<input type="checkbox" name="delete" value="1"></td></tr>');
        row.find('.size').text(o.formatFileSize(file.size));
        if (file.error) {
            row.find('.name').text(file.name);
            row.find('.error').text(
                locale.fileupload.errors[file.error] || file.error
            );
        } else {
            row.find('.name a').text(file.name);
            if (file.thumbnail_url) {
                row.find('.preview').append('<a><img></a>')
                    .find('img').prop('src', file.thumbnail_url);
                row.find('a').prop('rel', 'gallery');
            }
            row.find('a').prop('href', file.url);
            row.find('.delete button')
                .attr('data-type', file.delete_type)
                .attr('data-url', file.delete_url);
        }
        rows = rows.add(row);
    });
    return rows;
  }
});
4

1 回答 1

1

'TypeError: $("#fileupload").fileupload' 消息可能意味着您在'无冲突' 模式下加载 jQuery:http: //api.jquery.com/jQuery.noConflict/ 这是由 wordpress 引擎完成的. 这里建议了一个解决方案(来自http://api.jquery.com/jQuery.noConflict/):

恢复 $ 别名,然后创建并执行一个函数以在函数范围内将 $ 作为 jQuery 别名提供。在函数内部,原始 $ 对象不可用。这适用于大多数不依赖任何其他库的插件。

jQuery.noConflict();
(function($) { 
  $(function() {
    // more code using $ as alias to jQuery
  });
})(jQuery);
// other code using $ as an alias to the other library
于 2012-10-19T13:34:28.630 回答