jQuery文件上传插件模板引擎?

3

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

然而,它使用了一种曾经与jquery绑定在一起但已被停用和从jquery中删除的JavaScript模板语言。我的同事希望我删除插件中的模板引擎部分,并改为直接使用纯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)为null ... urn {“\n”:“\ n”,“\ r”:“\ r”,“\ t”:“\ t”,“”:“”}[a] ||“\” + a;如果(c)返回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;
  }
});
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

太好了!我在Facebook应用程序中尝试使用文件上传,这对我来说是个技巧。谢谢。 - Hasan Salameh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接