Fix image loader bug which caused broken links

This commit is contained in:
Andrew Miner
2015-01-15 09:35:00 -08:00
parent 2e163600fa
commit 355e98b032
4 changed files with 30 additions and 14 deletions
@@ -15,7 +15,7 @@ module.exports = class CraftingGridController extends BaseController
constructor: (options={})-> constructor: (options={})->
if not options.model? then throw new Error 'options.model is required' if not options.model? then throw new Error 'options.model is required'
options.imageLoader ?= new ImageLoader default:'/images/unknown.png' options.imageLoader ?= new ImageLoader defaultUrl:'/images/unknown.png'
options.templateName = 'crafting_grid' options.templateName = 'crafting_grid'
super options super options
@@ -17,7 +17,7 @@ module.exports = class CraftingTableController extends BaseController
constructor: (options={})-> constructor: (options={})->
if not options.model? then throw new Error 'options.model is required' if not options.model? then throw new Error 'options.model is required'
if not options.modPack? then throw new Error 'options.modPack is required' if not options.modPack? then throw new Error 'options.modPack is required'
options.imageLoader ?= new ImageLoader default:'/images/unknown.png' options.imageLoader ?= new ImageLoader defaultUrl:'/images/unknown.png'
options.templateName = 'crafting_table' options.templateName = 'crafting_table'
super options super options
@@ -35,7 +35,9 @@ module.exports = class CraftingTableController extends BaseController
# BaseController Overrides ##################################################################### # BaseController Overrides #####################################################################
onDidRender: -> onDidRender: ->
@gridController = @addChild CraftingGridController, '.view__crafting_grid', model:@model.grid @gridController = @addChild CraftingGridController, '.view__crafting_grid',
model: @model.grid
imageLoader: @imageLoader
@$multiplier = @$('.multiplier') @$multiplier = @$('.multiplier')
@$next = @$('.next') @$next = @$('.next')
+20 -9
View File
@@ -12,13 +12,13 @@ All rights reserved.
module.exports = class ImageLoader module.exports = class ImageLoader
constructor: (options={})-> constructor: (options={})->
options.defaultUrl ?= '' options.defaultUrl ?= null
options.onLoading ?= -> @hide() options.onLoading ?= -> @hide()
options.onLoad ?= -> @show() options.onLoad ?= -> @show()
@defaultUrl = options.defaultUrl @defaultUrl = options.defaultUrl
@onLoading = options.onLoading @onLoading = options.onLoading
@onLoad = options.onLoad @onLoad = options.onLoad
@_images = {} @_images = {}
@@ -45,10 +45,10 @@ module.exports = class ImageLoader
$el.data 'isLoading', true $el.data 'isLoading', true
$el.data 'isLoaded', false $el.data 'isLoaded', false
if data.isLoaded? if data.isLoaded
@_loadImageIntoElement data.imageUrl, $el @_loadImageIntoElement data.imageUrl, $el
else else
if @defaultUrl? then $el.attr 'src', @defaultUrl $el.removeAttr 'src'
if data.elements.indexOf($el) is -1 then data.elements.push $el if data.elements.indexOf($el) is -1 then data.elements.push $el
return this return this
@@ -59,9 +59,10 @@ module.exports = class ImageLoader
data = imageUrl:imageUrl, elements:[], image:new Image, isLoaded:false data = imageUrl:imageUrl, elements:[], image:new Image, isLoaded:false
@_images[imageUrl] = data @_images[imageUrl] = data
data.image = new Image data.image = new Image
data.image.onload = => @_onImageLoaded data data.image.onload = => @_onImageLoaded data
data.image.src = imageUrl data.image.onerror = => @_onImageError data
data.image.src = imageUrl
return data return data
@@ -74,6 +75,16 @@ module.exports = class ImageLoader
data.elements = [] data.elements = []
data.isLoaded = true data.isLoaded = true
_onImageError: (data)->
if @defaultUrl?
data.imageUrl = @defaultUrl
for $el in data.elements
@_loadImageIntoElement @defaultUrl, $el
data.elements = []
data.isLoaded = true
_loadImageIntoElement: (imageUrl, $el)-> _loadImageIntoElement: (imageUrl, $el)->
$el.data 'isLoading', false $el.data 'isLoading', false
$el.data 'isLoaded', true $el.data 'isLoaded', true
@@ -22,6 +22,8 @@ module.exports = class ItemPageController extends BaseController
options.templateName = 'item_page' options.templateName = 'item_page'
super options super options
@imageLoader = options.imageLoader
# Event Methods ################################################################################ # Event Methods ################################################################################
onToolsBoxToggled: -> onToolsBoxToggled: ->
@@ -55,8 +57,9 @@ module.exports = class ItemPageController extends BaseController
title: "Items you'll need" title: "Items you'll need"
@craftingTableController = @addChild CraftingTableController, '.view__crafting_table', @craftingTableController = @addChild CraftingTableController, '.view__crafting_table',
model: @model.table imageLoader: @imageLoader
modPack: @model.modPack model: @model.table
modPack: @model.modPack
@modPackController = @addChild ModPackController, '.view__mod_pack', model:@model.modPack @modPackController = @addChild ModPackController, '.view__mod_pack', model:@model.modPack