JSON.stringify(m.prop(x)) use x.toJSON method when possible
When JSON serializing m.prop, check if wrapped object does define toJSON method and if so, return it's result.
This commit is contained in:
parent
42b21a5950
commit
c71e8f4fcb
2 changed files with 17 additions and 0 deletions
|
|
@ -1331,6 +1331,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
prop.toJSON = function () {
|
prop.toJSON = function () {
|
||||||
|
if (store && isFunction(store.toJSON)) return store.toJSON()
|
||||||
return store
|
return store
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,22 @@ describe("m.prop()", function () {
|
||||||
expect(JSON.stringify(obj)).to.equal('{"prop":"test"}')
|
expect(JSON.stringify(obj)).to.equal('{"prop":"test"}')
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it("correctly stringifies Date", function () {
|
||||||
|
var prop = m.prop(new Date(999))
|
||||||
|
expect(JSON.stringify(prop)).to.equal('"1970-01-01T00:00:00.999Z"')
|
||||||
|
})
|
||||||
|
|
||||||
|
it("correctly stringifies object with toJSON method", function () {
|
||||||
|
function Thing(name) {
|
||||||
|
this.name = name
|
||||||
|
}
|
||||||
|
Thing.prototype.toJSON = function() {
|
||||||
|
return {kind: 'Thing', name: this.name}
|
||||||
|
}
|
||||||
|
var banana = m.prop(new Thing("bannana"))
|
||||||
|
expect(JSON.stringify(banana)).to.equal('{"kind":"Thing","name":"bannana"}')
|
||||||
|
})
|
||||||
|
|
||||||
it("correctly wraps Mithril promises", function () {
|
it("correctly wraps Mithril promises", function () {
|
||||||
var defer = m.deferred()
|
var defer = m.deferred()
|
||||||
var prop = m.prop(defer.promise)
|
var prop = m.prop(defer.promise)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue