Ember - HandleBar不显示blob图像

时间:2014-06-08 19:12:58

标签: javascript ember.js blob handlebars.js

我使用Base64编码从服务器获取图像。

我的Base64响应是正确的。 在客户端,我使用以下内容:

var blob = base64ToBlob(content, {type: 'image/jpeg'});
            URL = window.URL || window.webkitURL;
            var blobUrl = URL.createObjectURL(blob);
            //Displaying image in div works.
            var elImage = $("#dbimage");
            elImage.append("<img src='data:image/jpeg;base64," + content+ " '/>");
            ///This doesn;t work.
            return blobUrl;

var base64ToBlob = function(base64) {
  var binary = atob(base64);
  var len = binary.length;
  var buffer = new ArrayBuffer(len);
  var view = new Uint8Array(buffer);
  for (var i = 0; i < len; i++) {
    view[i] = binary.charCodeAt(i);
  }
  return new Blob([view], {type: 'image/jpeg'});
};

我将blobURL返回给HandleBar模板。它似乎没有识别出斑点。

此转换封装在承诺中。在HandleBar模板中,我写的是这样的:

<img  {{bind-attr src=image.content}}  />

此承诺存在于image属性中。 div中显示的图像工作正常,但blob中的图像不显示。

编辑:

我正在回复承诺,就像这样:

image : function() {
var promise =  jQuery.ajax({
        url: '/getattachments/?id=' + this.id + "&name=" + docname,
       contentType: 'image/jpeg',
        type: 'GET',
        processData : false,
        success: function(content) {
            var blob = base64ToBlob(content, { type: 'image/jpeg'} );
           URL = window.URL || window.webkitURL;
            var blobUrl = URL.createObjectURL(blob);
            return blobUrl;                
        },
       error : function(content)
       {
           Em.Logger.info('Model:', this.id, 'has no image', err);
           return '';
        }
       return DS.PromiseObject.create({ promise: promise });
      }.property('_attachments'),
    });

帮助。

感谢。

1 个答案:

答案 0 :(得分:1)

在您提供的特定答案中,有一些小问题。

属性需要是计算属性,而不仅仅是函数

foo: function(){

}.property()  // <-------this here

此外,您使用的是Ember Data(DS命名空间)的一部分,它不是Ember的一部分,它是一个单独的产品。这很好,但是如果您要使用该文件,则需要包含该文件。

由于promise是返回直接文本而不是对象,因此您需要连接到promise对象的content属性。

<img {{bind-attr src=img.content}}/>

http://emberjs.jsbin.com/qiyodojo/8/edit