3
respostas

Erro ao carregar a página - copiei o código mural.js

Mural.js:3 Uncaught TypeError: Cannot read property 'map' of null at Mural.js:3 at Mural.js:46 novoCartao.js:30 Uncaught ReferenceError: Mural is not defined at novoCartao.js:30

3 respostas

Oi Flavio, tudo bem? Cola o seu novoCartao.js e o Mural.js aqui pra gente ver o que pode ser?

Boa noite Wanderson, segue abaixo:

novoCartao.js
(function($, Mural, Cartao, Tags, Busca){
    "use strict"

    $(".novoCartao").submit(function(event){
        event.preventDefault()
        let $campoConteudo = $(".novoCartao-conteudo")
        let conteudo = $campoConteudo.val().trim()
        if(conteudo){
            let novoCartao = new Cartao(conteudo)
            if(Mural.adiciona(novoCartao)){
                $campoConteudo.val("")
            } else {
                alert("Você não está logado")
            }
        }
    })

    $(".novoCartao-conteudo").on("focus", function(){
        let $campoConteudo = $(this)
        let tagsAntigas = Tags.extraiTags($campoConteudo.val())
        let tagsToRemoveRegex = $campoConteudo.val().split(/[\s\n]/).filter(function(palavra){
            return palavra && tagsAntigas.indexOf(palavra) >= 0
        }).join("|")
        let txt = $campoConteudo.val().replace(new RegExp(tagsToRemoveRegex,"g"), "").trim()
        let tags = Busca.tags.reduce(function(txt,tag){
            return txt + "\n" + tag
        },"")
        $campoConteudo.val(tags && (txt + "\n" + tags))
    })
})(jQuery, Mural, Cartao, Tags, Busca)
mural.js
const Mural = (function(_render, Filtro){
    "use strict"
    let cartoes = JSON.parse(localStorage.getItem("cartoes")).map(cartaoLocal => new Cartao(cartaoLocal.conteudo, cartaoLocal.tipo))
    cartoes.forEach(cartao => {
        preparaCartao(cartao)
    })

    const render = () => _render({cartoes: cartoes, filtro: Filtro.tagsETexto});
    render()
    Filtro.on("filtrado", render)

    function preparaCartao(cartao){
        cartao.on("mudanca.**", salvaCartoes)
        cartao.on("remocao", ()=>{
            cartoes = cartoes.slice(0)
            cartoes.splice(cartoes.indexOf(cartao),1)
            salvaCartoes()
            render()
        })
    }

    function salvaCartoes(){
        localStorage.setItem("cartoes", JSON.stringify(
            cartoes.map(cartao => ({conteudo: cartao.conteudo, tipo: cartao.tipo}))
        ))
    }

    function adiciona(cartao){
        if(logado){
            cartoes.push(cartao)
            salvaCartoes()
            cartao.on("mudanca.**", render)
            preparaCartao(cartao)

            render()
            return true
        } else {
            alert("Você não está logado")
        }
    }

    return Object.seal({
        adiciona
    })

})(Mural_render, Filtro)

Opa Flavio, pelo que entendi, o seu localStorage não está retornando nada, está retornando null, será que você tem dados nele?

É essa parte:

localStorage.getItem("cartoes")

E outra, em novo cartão, o Mural não está sendo passado corretamente, será que você não deixou pra definir o Mural só depois de executar o novo cartão? Pode ser só um problema na ordem dos scripts...