2015-05-06 3 views
0

У меня есть файл, test.html, и я добавляю к нему другой файл, appended.html ему по разным причинам. В файле appended.html есть javascript, и я ссылаюсь на функцию, appendedFn, определенную в appended.html в функции в test.html, testFn.JQuery append with scope scope scope

Это все работает отлично, но я только начал осуществлять Backbone маршрутизатор, и один из маршрутов моего маршрутизатора вызывает testFn, но по какой-то причине я получаю ReferenceError когда testFn звонки appendedFn, но только когда testFn вызывается из маршрутизатор. Он говорит appendedFn is not defined, и я думаю, что это связано с тем, что маршрутизатор не имеет доступа к содержимому, которое я добавил?

Это выглядит примерно так:

test.html:

function testFn() { 
    $('#someObj').append(anotherObj); //anotherObj contains the contents of appended.html 
    appendedFn(); //defined in appended.html 
} 

router.js:

var Router = Backbone.Router.extend({ 
routes: {}, //routes 
goSomewhere: function() { 
    testFn(); 
} 

Edit: Я могу успешно позвонить testFn из внутри test.html. Кроме того, когда я распечатываю div, к которому я добавил appended.html (до того, как я попробую позвонить appendedFn), он правильно распечатает добавленный html и javascript. По какой-то причине, когда я вызываю testFn с маршрутизатора, загружаются html и javascript (о чем свидетельствует печатное содержимое div), но он не может получить доступ к содержимому (не html или javascript appended.html).

Благодарим за ответы, я понимаю, что это может быть очень запутанная статья, но я пытался ее проработать целую часу часов, и я не могу понять это.

+0

трудно сказать без дополнительной информации, но я бы предположил, что вы выполняете этот метод в маршрутизаторе _before_, загрузился дополнительный файл. –

ответ

0

Это не проблема с базой. Введенный тег скрипта jQuery работает, как обычно, при выполнении javascript.

(function(){ 
    $("body").append('<script>function test(){console.log("say hi")}</script>'); 
    test(); // outputs "say hi" 
})() 

Есть 2 возможности, о которых я могу думать, почему вы не можете назвать метод.

  • У вас нет метода в anotherObj

    проверить вас есть метод в anotherObj когда вы append к DOM.

  • У вас есть метод. но он находится в зоне действия.

    , когда вы определяете новую переменную var something в функции, она будет областью переменной, к которой нельзя получить доступ из внешнего кода.