Merge in upstream docs
This commit is contained in:
parent
d874748c6f
commit
c92d9f7551
1 changed files with 55 additions and 2 deletions
|
|
@ -17,6 +17,7 @@
|
||||||
- [Configuring the underlying XMLHttpRequest](#configuring-the-underlying-xmlhttprequest)
|
- [Configuring the underlying XMLHttpRequest](#configuring-the-underlying-xmlhttprequest)
|
||||||
- [Aborting a request](#aborting-a-request)
|
- [Aborting a request](#aborting-a-request)
|
||||||
- [Using JSON-P](#using-json-p)
|
- [Using JSON-P](#using-json-p)
|
||||||
|
- [Rendering before web service requests finish](#rendering-before-web-service-requests-finish)
|
||||||
- [Signature](#signature)
|
- [Signature](#signature)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
@ -383,6 +384,35 @@ m.request({
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
### Rendering before web service requests finish
|
||||||
|
|
||||||
|
By default, Mithril waits for web service requests to complete before attempting a redraw. This ensures that data being accessed in the view isn't nullable as a result of asynchronous data not being available yet.
|
||||||
|
|
||||||
|
However, sometimes we do want to be able to redraw before a web service request completes, either because one web service out of many is slow, or because we don't need its response in order to redraw.
|
||||||
|
|
||||||
|
Setting the `background` option to `true` prevents a request from affecting redrawing. This means it's possible for a view to attempt to use data before it is available. You can specify an initial value for the `m.request` getter-setter in order to avoid having to write defensive code against potential null reference exceptions:
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
var demo = {}
|
||||||
|
|
||||||
|
demo.controller = function() {
|
||||||
|
return {
|
||||||
|
users: m.request({method: "GET", url: "/api/user", background: true, initialValue: []})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//in the view
|
||||||
|
demo.view = function(ctrl) {
|
||||||
|
//This view gets rendered before the request above completes
|
||||||
|
//Calling .map doesn't throw an error because we defined the initial value to be an empty array, instead of undefined
|
||||||
|
return ctrl.users().map(function() {
|
||||||
|
return m("div", user.name)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
### Signature
|
### Signature
|
||||||
|
|
||||||
[How to read signatures](how-to-read-signatures.md)
|
[How to read signatures](how-to-read-signatures.md)
|
||||||
|
|
@ -401,6 +431,7 @@ where:
|
||||||
[String password,]
|
[String password,]
|
||||||
[Object<any> data,]
|
[Object<any> data,]
|
||||||
[Boolean background,]
|
[Boolean background,]
|
||||||
|
[any initialValue,]
|
||||||
[any unwrapSuccess(any data),]
|
[any unwrapSuccess(any data),]
|
||||||
[any unwrapError(any data),]
|
[any unwrapError(any data),]
|
||||||
[String serialize(any dataToSerialize),]
|
[String serialize(any dataToSerialize),]
|
||||||
|
|
@ -454,10 +485,32 @@ where:
|
||||||
In order to force a redraw after a background request, use [`m.redraw`](mithril.redraw.md)
|
In order to force a redraw after a background request, use [`m.redraw`](mithril.redraw.md)
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
m.request({method: "GET", url: "/foo", background: true})
|
var demo = {}
|
||||||
.then(m.redraw); //force redraw
|
|
||||||
|
demo.controller = function() {
|
||||||
|
return {
|
||||||
|
users: m.request({method: "GET", url: "/api/user", background: true, initialValue: []}).then(function(value) {
|
||||||
|
//force redraw
|
||||||
|
m.redraw()
|
||||||
|
return value
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
demo.view = function(ctrl) {
|
||||||
|
//this view renders twice (once immediately, and once after the request above completes)
|
||||||
|
return ctrl.users.map(function(user) {
|
||||||
|
return m("div", user.name)
|
||||||
|
})
|
||||||
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
It's recommended that you always set an `initialValue` when setting the `background` option to true.
|
||||||
|
|
||||||
|
- **any initialValue** (optional)
|
||||||
|
|
||||||
|
The value that populates the returned getter-setter before the request completes. This is useful when using the `background` option, in order to avoid the need for null checks in views that may be attempting to access the returned getter-setter before the asynchronous request resolves.
|
||||||
|
|
||||||
- **any unwrapSuccess(any data)** (optional)
|
- **any unwrapSuccess(any data)** (optional)
|
||||||
|
|
||||||
A preprocessor function to unwrap the data from a success response in case the response contains metadata wrapping the data.
|
A preprocessor function to unwrap the data from a success response in case the response contains metadata wrapping the data.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue