example
This commit is contained in:
parent
f3f5b10f1b
commit
4d03595bb1
2 changed files with 26 additions and 11 deletions
|
|
@ -450,7 +450,7 @@ var Uploader = {
|
||||||
var formData = new FormData
|
var formData = new FormData
|
||||||
for (var key in options.data) {
|
for (var key in options.data) {
|
||||||
for (var i = 0; i < options.data[key].length; i++) {
|
for (var i = 0; i < options.data[key].length; i++) {
|
||||||
formData.append(key, files[i])
|
formData.append(key, options.data[key][i])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -461,7 +461,7 @@ var Uploader = {
|
||||||
return m.request(options)
|
return m.request(options)
|
||||||
},
|
},
|
||||||
serialize: function(files) {
|
serialize: function(files) {
|
||||||
var promises = Array.prototype.slice.call(files).map(function(file) {
|
var promises = files.map(function(file) {
|
||||||
var deferred = m.deferred()
|
var deferred = m.deferred()
|
||||||
|
|
||||||
var reader = new FileReader
|
var reader = new FileReader
|
||||||
|
|
@ -470,7 +470,7 @@ var Uploader = {
|
||||||
deferred.resolve(e.result)
|
deferred.resolve(e.result)
|
||||||
}
|
}
|
||||||
reader.onerror = deferred.reject
|
reader.onerror = deferred.reject
|
||||||
return deferred
|
return deferred.promise
|
||||||
})
|
})
|
||||||
return m.sync(promises)
|
return m.sync(promises)
|
||||||
},
|
},
|
||||||
|
|
@ -481,7 +481,7 @@ var Uploader = {
|
||||||
this.update = function(e) {
|
this.update = function(e) {
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
if (typeof args.onchange == "function") {
|
if (typeof args.onchange == "function") {
|
||||||
args.onchange((e.dataTransfer || e.target).files)
|
args.onchange([].slice.call((e.dataTransfer || e.target).files))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -497,9 +497,11 @@ Below are some examples of consuming the `Uploader` component:
|
||||||
//usage demo 1: standalone multipart/form-data upload when files are dropped into the component
|
//usage demo 1: standalone multipart/form-data upload when files are dropped into the component
|
||||||
var Demo1 = {
|
var Demo1 = {
|
||||||
controller: function() {
|
controller: function() {
|
||||||
treturn {
|
return {
|
||||||
upload: function(files) {
|
upload: function(files) {
|
||||||
Uploader.upload({method: "POST", url: "/api/files", {data: {files: files}}})
|
Uploader.upload({method: "POST", url: "/api/files", data: {files: files}}).then(function() {
|
||||||
|
alert("uploaded!")
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -510,7 +512,11 @@ var Demo1 = {
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
[Demo](http://jsfiddle.net/vL22kjvs/5/)
|
||||||
|
|
||||||
|
```javascript
|
||||||
//usage demo 2: upload as base-64 encoded data url from a parent form
|
//usage demo 2: upload as base-64 encoded data url from a parent form
|
||||||
var Demo2 = {
|
var Demo2 = {
|
||||||
Asset: {
|
Asset: {
|
||||||
|
|
@ -524,8 +530,10 @@ var Demo2 = {
|
||||||
return {
|
return {
|
||||||
files: files,
|
files: files,
|
||||||
save: function() {
|
save: function() {
|
||||||
Uploader.serialize(files).then(function(files) {
|
Uploader.serialize(files()).then(function(files) {
|
||||||
Asset.save({files: files})
|
Demo2.Asset.save({files: files}).then(function() {
|
||||||
|
alert("Uploaded!")
|
||||||
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -533,11 +541,18 @@ var Demo2 = {
|
||||||
view: function(ctrl) {
|
view: function(ctrl) {
|
||||||
return [
|
return [
|
||||||
m("h1", "Uploader demo"),
|
m("h1", "Uploader demo"),
|
||||||
|
m("p", "Drag and drop a file below. An alert box will appear when the upload finishes"),
|
||||||
m("form", [
|
m("form", [
|
||||||
m.component(Uploader, {onchange: ctrl.files}),
|
m.component(Uploader, {onchange: ctrl.files}),
|
||||||
m("button[type=button]", {onclick: ctrl.save})
|
ctrl.files().map(function(file) {
|
||||||
|
return file.name
|
||||||
|
}).join(),
|
||||||
|
m("button[type=button]", {onclick: ctrl.save}, "Upload")
|
||||||
])
|
])
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
[Demo](http://jsfiddle.net/vL22kjvs/6/)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -496,10 +496,10 @@ m.mount(document, {controller: todo.controller, view: todo.view});
|
||||||
</script>
|
</script>
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
This example is also available as a [jsFiddle](http://jsfiddle.net/milesmatthias/fbgypzbr/1/).
|
This example is also available as a [jsFiddle](http://jsfiddle.net/milesmatthias/fbgypzbr/1/).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Notes on Architecture
|
## Notes on Architecture
|
||||||
|
|
||||||
Idiomatic Mithril code is meant to apply good programming conventions and be easy to refactor.
|
Idiomatic Mithril code is meant to apply good programming conventions and be easy to refactor.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue