我有一个文件test.html
,并且由于各种原因我要向其添加另一个文件appended.html
。文件appended.html
中包含javascript,我在appendedFn
,appended.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>
答案 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
时,它将是作用域变量,无法从外部代码访问。