fix onunload preventdefault in non-curried modules
This commit is contained in:
parent
adf7b39650
commit
d482020daa
2 changed files with 76 additions and 3 deletions
|
|
@ -234,6 +234,7 @@ var m = (function app(window, undefined) {
|
||||||
if (data.controller) {
|
if (data.controller) {
|
||||||
var module = data
|
var module = data
|
||||||
var controller = cached.controller || new (module.controller || function() {})
|
var controller = cached.controller || new (module.controller || function() {})
|
||||||
|
if (controller.onunload) unloaders.push({controller: controller, handler: controller.onunload})
|
||||||
data = module.view(controller)
|
data = module.view(controller)
|
||||||
if (!data.tag) throw new Error(module.view.toString() + "\n\nThis template must return a virtual element, not an array, string, etc.")
|
if (!data.tag) throw new Error(module.view.toString() + "\n\nThis template must return a virtual element, not an array, string, etc.")
|
||||||
}
|
}
|
||||||
|
|
@ -506,9 +507,7 @@ var m = (function app(window, undefined) {
|
||||||
var FRAME_BUDGET = 16; //60 frames per second = 1 call per 16 ms
|
var FRAME_BUDGET = 16; //60 frames per second = 1 call per 16 ms
|
||||||
function submodule(module, args) {
|
function submodule(module, args) {
|
||||||
var controller = function() {
|
var controller = function() {
|
||||||
var instance = module.controller.apply(this, args) || this
|
return module.controller.apply(this, args) || this
|
||||||
if (instance.onunload) unloaders.push({controller: instance, handler: instance.onunload})
|
|
||||||
return instance
|
|
||||||
}
|
}
|
||||||
var view = function(ctrl) {
|
var view = function(ctrl) {
|
||||||
if (arguments.length > 1) args = args.concat([].slice.call(arguments, 1))
|
if (arguments.length > 1) args = args.concat([].slice.call(arguments, 1))
|
||||||
|
|
|
||||||
|
|
@ -350,6 +350,80 @@ function testMithril(mock) {
|
||||||
|
|
||||||
return count === 1
|
return count === 1
|
||||||
})
|
})
|
||||||
|
test(function() {
|
||||||
|
//calling preventDefault from component's onunload should prevent route change
|
||||||
|
mock.requestAnimationFrame.$resolve()
|
||||||
|
mock.location.search = "?"
|
||||||
|
|
||||||
|
var root = mock.document.createElement("div")
|
||||||
|
var loaded = false
|
||||||
|
var testEnabled = true
|
||||||
|
var module = {
|
||||||
|
controller: function() {},
|
||||||
|
view: function() {
|
||||||
|
return m.module(sub)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var sub = {
|
||||||
|
controller: function(opts) {
|
||||||
|
controller = this
|
||||||
|
this.onunload = function(e) {if (testEnabled) e.preventDefault()}
|
||||||
|
},
|
||||||
|
view: function() {
|
||||||
|
return m("div")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
m.route(root, "/a", {
|
||||||
|
"/a": module,
|
||||||
|
"/b": {controller: function() {loaded = true}, view: function() {}}
|
||||||
|
})
|
||||||
|
|
||||||
|
mock.requestAnimationFrame.$resolve()
|
||||||
|
|
||||||
|
m.route("/b")
|
||||||
|
|
||||||
|
mock.requestAnimationFrame.$resolve()
|
||||||
|
testEnabled = false
|
||||||
|
|
||||||
|
return loaded === false
|
||||||
|
})
|
||||||
|
test(function() {
|
||||||
|
//calling preventDefault from non-curried component's onunload should prevent route change
|
||||||
|
mock.requestAnimationFrame.$resolve()
|
||||||
|
mock.location.search = "?"
|
||||||
|
|
||||||
|
var root = mock.document.createElement("div")
|
||||||
|
var loaded = false
|
||||||
|
var testEnabled = true
|
||||||
|
var module = {
|
||||||
|
controller: function() {},
|
||||||
|
view: function() {
|
||||||
|
return sub
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var sub = {
|
||||||
|
controller: function(opts) {
|
||||||
|
controller = this
|
||||||
|
this.onunload = function(e) {if (testEnabled) e.preventDefault()}
|
||||||
|
},
|
||||||
|
view: function() {
|
||||||
|
return m("div")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
m.route(root, "/a", {
|
||||||
|
"/a": module,
|
||||||
|
"/b": {controller: function() {loaded = true}, view: function() {}}
|
||||||
|
})
|
||||||
|
|
||||||
|
mock.requestAnimationFrame.$resolve()
|
||||||
|
|
||||||
|
m.route("/b")
|
||||||
|
|
||||||
|
mock.requestAnimationFrame.$resolve()
|
||||||
|
testEnabled = false
|
||||||
|
|
||||||
|
return loaded === false
|
||||||
|
})
|
||||||
|
|
||||||
//m.withAttr
|
//m.withAttr
|
||||||
test(function() {
|
test(function() {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue