mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2025-04-14 05:55:00 -04:00
Better preserving supermodel when navigating between new hero levels. Fixed a problem with garbage collection of large CocoModel error callbacks.
This commit is contained in:
parent
cce36333dd
commit
c0c436189f
4 changed files with 30 additions and 6 deletions
app
models
views/play
|
@ -121,6 +121,7 @@ class CocoModel extends Backbone.Model
|
|||
@markToRevert() if @_revertAttributes
|
||||
@clearBackup()
|
||||
CocoModel.pollAchievements()
|
||||
options.success = options.error = null # So the callbacks can be garbage-collected.
|
||||
options.error = (model, res) =>
|
||||
error(@, res) if error
|
||||
return unless @notyErrors
|
||||
|
@ -131,6 +132,7 @@ class CocoModel extends Backbone.Model
|
|||
noty text: "#{errorMessage}: #{res.status} #{res.statusText}", layout: 'topCenter', type: 'error', killer: false, timeout: 10000
|
||||
catch notyError
|
||||
console.warn "Couldn't even show noty error for", error, "because", notyError
|
||||
options.success = options.error = null # So the callbacks can be garbage-collected.
|
||||
@trigger 'save', @
|
||||
return super attrs, options
|
||||
|
||||
|
|
|
@ -26,6 +26,8 @@ module.exports = class ControlBarView extends CocoView
|
|||
|
||||
'click': -> Backbone.Mediator.publish 'tome:focus-editor', {}
|
||||
|
||||
'click .home a': 'onClickHome'
|
||||
|
||||
constructor: (options) ->
|
||||
@worldName = options.worldName
|
||||
@session = options.session
|
||||
|
@ -51,12 +53,18 @@ module.exports = class ControlBarView extends CocoView
|
|||
c.multiplayerEnabled = @session.get('multiplayer')
|
||||
c.ladderGame = @level.get('type') is 'ladder'
|
||||
c.spectateGame = @spectateGame
|
||||
@homeViewArgs = [{supermodel: @supermodel}]
|
||||
if @level.get('type', true) in ['ladder', 'ladder-tutorial']
|
||||
c.homeLink = '/play/ladder/' + @level.get('slug').replace /\-tutorial$/, ''
|
||||
levelID = @level.get('slug').replace /\-tutorial$/, ''
|
||||
@homeLink = c.homeLink = '/play/ladder/' + levelID
|
||||
@homeViewClass = require 'views/play/ladder/LadderView'
|
||||
@homeViewArgs.push levelID
|
||||
else if @level.get('type', true) is 'hero'
|
||||
c.homeLink = '/play-hero'
|
||||
@homeLink = c.homeLink = '/play-hero'
|
||||
@homeViewClass = require 'views/play/WorldMapView'
|
||||
else
|
||||
c.homeLink = '/'
|
||||
@homeLink = c.homeLink = '/'
|
||||
@homeViewClass = require 'views/HomeView'
|
||||
c.editorLink = "/editor/level/#{@level.get('slug')}"
|
||||
c.multiplayerSession = @multiplayerSession if @multiplayerSession
|
||||
c.multiplayerPlayers = @multiplayerPlayers if @multiplayerPlayers
|
||||
|
@ -84,6 +92,11 @@ module.exports = class ControlBarView extends CocoView
|
|||
showGameMenuModal: ->
|
||||
@openModalView new GameMenuModal level: @level, session: @session
|
||||
|
||||
onClickHome: (e) ->
|
||||
e.preventDefault()
|
||||
e.stopImmediatePropagation()
|
||||
Backbone.Mediator.publish 'router:navigate', route: @homeLink, viewClass: @homeViewClass, viewArgs: @homeViewArgs
|
||||
|
||||
onJoinedRealTimeMultiplayerGame: (e) ->
|
||||
@multiplayerSession = e.session
|
||||
@multiplayerPlayers = new RealTimeCollection('multiplayer_level_sessions/' + @multiplayerSession.id + '/players')
|
||||
|
|
|
@ -14,6 +14,7 @@ module.exports = class VictoryModal extends ModalView
|
|||
|
||||
events:
|
||||
'click .next-level-button': 'onPlayNextLevel'
|
||||
'click .world-map-button': 'onClickWorldMap'
|
||||
|
||||
# review events
|
||||
'mouseover .rating i': (e) -> @showStars(@starNum($(e.target)))
|
||||
|
@ -64,6 +65,11 @@ module.exports = class VictoryModal extends ModalView
|
|||
@saveReview() if @$el.find('.review textarea').val()
|
||||
Backbone.Mediator.publish 'level:play-next-level', {}
|
||||
|
||||
onClickWorldMap: (e) ->
|
||||
e.preventDefault()
|
||||
e.stopImmediatePropagation()
|
||||
Backbone.Mediator.publish 'router:navigate', route: '/play-hero', viewClass: require('views/play/WorldMapView'), viewArgs: [{supermodel: @supermodel}]
|
||||
|
||||
onGameSubmitted: (e) ->
|
||||
ladderURL = "/play/ladder/#{@level.get('slug')}#my-matches"
|
||||
Backbone.Mediator.publish 'router:navigate', route: ladderURL
|
||||
|
|
|
@ -3,6 +3,7 @@ template = require 'templates/play/modal/play-level-modal'
|
|||
ChooseHeroView = require 'views/game-menu/ChooseHeroView'
|
||||
InventoryView = require 'views/game-menu/InventoryView'
|
||||
PlayLevelView = require 'views/play/level/PlayLevelView'
|
||||
LadderView = require 'views/play/ladder/LadderView'
|
||||
LevelSession = require 'models/LevelSession'
|
||||
|
||||
module.exports = class PlayLevelModal extends ModalView
|
||||
|
@ -97,10 +98,12 @@ module.exports = class PlayLevelModal extends ModalView
|
|||
@showLoading()
|
||||
@updateConfig =>
|
||||
@navigatingToPlay = true
|
||||
viewClass = if @options.levelPath is 'ladder' then LadderView else PlayLevelView
|
||||
Backbone.Mediator.publish 'router:navigate', {
|
||||
route: "/play/#{@options.levelPath || 'level'}/#{@options.levelID}",
|
||||
viewClass: PlayLevelView,
|
||||
viewArgs: [{supermodel: @supermodel}, @options.levelID]}
|
||||
route: "/play/#{@options.levelPath || 'level'}/#{@options.levelID}"
|
||||
viewClass: viewClass
|
||||
viewArgs: [{supermodel: @supermodel}, @options.levelID]
|
||||
}
|
||||
|
||||
onEnterPressed: (e) ->
|
||||
(if @chooseHeroView.$el.hasClass('secret') then @onClickPlayLevel else @onClickChooseInventory).apply @
|
||||
|
|
Loading…
Add table
Reference in a new issue