编辑(2015.06):刚刚创建了一个基于组件的新解决方案。 该解决方案提供了一个预览和删除图标的上传按钮。 P.S.的fa
类Font Awesome
元器件车把
<script type="text/x-handlebars" data-template-name='components/avatar-picker'>
{{#if content}}
<img src={{content}}/> <a {{action 'remove'}}><i class="fa fa-close"></i></a>
{{else}}
<i class="fa fa-picture-o"></i>
{{/if}}
{{input-image fdata=content}}
</script>
元器件的JavaScript
App.AvatarPickerComponent = Ember.Component.extend({
actions: {
remove: function() {
this.set("content", null);
}
}
});
App.InputImageComponent = Ember.TextField.extend({
type: 'file',
change: function (evt) {
var input = evt.target;
if (input.files && input.files[0]) {
var that = this;
var reader = new FileReader();
reader.onload = function (e) {
var data = e.target.result;
that.set('fdata', data);
};
reader.readAsDataURL(input.files[0]);
}
}
});
使用例
{{avatar-picker content=model.avatar}}
旧回答
我拿了 Chris Meyers的例子,我把它做得很小。
模板
{{#view Ember.View contentBinding="foto"}}
{{view App.FotoUp}}
{{view App.FotoPreview width="200" srcBinding="foto"}}
{{/view}}
的JavaScript
App.FotoPreview= Ember.View.extend({
attributeBindings: ['src'],
tagName: 'img',
});
App.FotoUp= Ember.TextField.extend({
type: 'file',
change: function(evt) {
var input = evt.target;
if (input.files && input.files[0]) {
var that = this;
var reader = new FileReader();
reader.onload = function(e) {
var data = e.target.result;
that.set('parentView.content', data);
}
reader.readAsDataURL(input.files[0]);
}
},
});
我回复了您的评论btw - 并且只是为了澄清UploadFileView不是控制器,而是一个完整的自定义视图目的。老实说,我认为你可以修改我所展示的视图,使其更具动态性,并允许你的前端拥有多个文件上传输入 –
是的,UploadFileView是一个全视图对象。由于我不是一名ember.js专家,你能帮我用示例代码得到答案吗? – fvisticot