1. #1
    Sencha User
    Join Date
    Jan 2012
    Posts
    8
    Vote Rating
    0
    Answers
    1
    garrettweinberg is on a distinguished road

      0  

    Default Answered: how to test for missing resource

    Answered: how to test for missing resource


    Hi all,

    Here's a hopefully quick one for those with more Sencha Touch / Ext experience than I have. How would I programmatically test for the existence of a remote resource, say an image? In other words how do I forestall an HTTP 404 before it happens and perform some default action, say swapping in a default image?

    Thanks in advance,
    Garrett

  2. I ended up fixing this using plain HTML/JS, but would appreciate knowing about a more Ext-ish way to handle this. The idea is to use the onerror attribute of the <img> element to default to your fall-back image. It works fine with tpl's rather than hard-coded html.

    Code:
    
    function ImgError(source): {
        source.src = "resources/images/img_music_generic.png";
        source.onerror = "";
        return true;
    }
    
    <img src="someimage.png" onerror="ImgError(this);" />

  3. #2
    Sencha - Senior Forum Manager mitchellsimoens's Avatar
    Join Date
    Mar 2007
    Location
    St. Louis, MO
    Posts
    33,599
    Vote Rating
    434
    Answers
    3102
    mitchellsimoens has much to be proud of mitchellsimoens has much to be proud of mitchellsimoens has much to be proud of mitchellsimoens has much to be proud of mitchellsimoens has much to be proud of mitchellsimoens has much to be proud of mitchellsimoens has much to be proud of mitchellsimoens has much to be proud of mitchellsimoens has much to be proud of

      0  

    Default


    <img> tag will fire an error event and Ext.Img listens to that and fires an error event on the component if you use Ext.Img.
    Mitchell Simoens @SenchaMitch
    Sencha Inc, Senior Forum Manager
    ________________
    http://www.JSONPLint.com - Source to lint your JSONP!

    Check out my GitHub, lots of nice things for Ext JS 4 and Sencha Touch 2
    https://github.com/mitchellsimoens

    Think my support is good? Get more personalized support via a support subscription. https://www.sencha.com/store/

    Need more help with your app? Hire Sencha Services services@sencha.com

    Want to learn Sencha Touch 2? Check out Sencha Touch in Action that is almost in print!

    When posting code, please use BBCode's CODE tags.

  4. #3
    Sencha User
    Join Date
    Jan 2012
    Posts
    8
    Vote Rating
    0
    Answers
    1
    garrettweinberg is on a distinguished road

      0  

    Default not using Img

    not using Img


    Thanks, Mitchell. Two things. Rather than Ext.Img, I'm using a plain Ext.Component with an <image> tag in its tpl. I assume that doesn't matter. Secondly, where would I catch this error? Will it be thrown when I invoke setData() on the component?

  5. #4
    Sencha User
    Join Date
    Jan 2012
    Posts
    8
    Vote Rating
    0
    Answers
    1
    garrettweinberg is on a distinguished road

      0  

    Default


    The 404 happens during setData() according to my stack trace, but no exception is thrown.

  6. #5
    Sencha User
    Join Date
    Jan 2012
    Posts
    8
    Vote Rating
    0
    Answers
    1
    garrettweinberg is on a distinguished road

      0  

    Default


    Hello? Mitchell?...Anyone? I cannot catch a 404 during Component.setData() by the normal try{} catch{} means.

  7. #6
    Sencha User
    Join Date
    Jan 2012
    Posts
    8
    Vote Rating
    0
    Answers
    1
    garrettweinberg is on a distinguished road

      0  

    Default fixed using "plain" JS

    fixed using "plain" JS


    I ended up fixing this using plain HTML/JS, but would appreciate knowing about a more Ext-ish way to handle this. The idea is to use the onerror attribute of the <img> element to default to your fall-back image. It works fine with tpl's rather than hard-coded html.

    Code:
    
    function ImgError(source): {
        source.src = "resources/images/img_music_generic.png";
        source.onerror = "";
        return true;
    }
    
    <img src="someimage.png" onerror="ImgError(this);" />

Tags for this Thread