JQuery追加Backbone变量范围

时间:2015-05-06 23:09:14

标签: jquery backbone.js

我有一个文件test.html,并且由于各种原因我要向其添加另一个文件appended.html。文件appended.html中包含javascript,我在appendedFnappended.html的函数中引用test.html中定义的函数testFn

这一切都运行正常,但我刚刚开始实现一个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();
}

修改:我可以从testFn内成功呼叫test.html。 另外,当我打印出我附加appended.html的div时(在我尝试调用appendedFn之前),它会正确打印附加的html和javascript。出于某种原因,当我从路由器调用testFn时,加载了html和javascript(由打印的div内容证明),但它无法访问任何附加内容(不是html或javascript of { {1}})。

感谢所有的回复,我意识到这可能是一个非常令人困惑的帖子,但是我一直试图将它解决了整整一个小时,我无法弄明白。< / p>

1 个答案:

答案 0 :(得分:0)

这不是Backbone的问题.jQuery的插入脚本标记与通常的javascript执行一样。

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

有两种可能性,我可以想到为什么你不能调用这个方法。

  • 您没有anotherObj

    中的方法

    检查当你anotherObj到DOM时,append中有方法。

  • 你有方法。但它在一个范围内。

    在函数中定义新变量var something时,它将是作用域变量,无法从外部代码访问。