我正在写一个twitter聚合器,我需要一些帮助才能解决错误'未捕获的ReferenceError:未定义sqTweetData'。看起来控制台指向我的for循环。我已经设置了一个部分,使用下划线js编译并加载到#main-content中。
For Loop Code
fs = TblserversFilter(data=query, queryset=...)
filtered_qs = fs.filter()
home.js编译代码
<!-- Main Content -->
<main class="main">
<div class="container-flex" id="main-content"></div>
</main> <!-- End Main Content -->
<!-- Current Tweet Partials -->
<script id="active-tweet-partial" type="underscore/template">
<section class="tweetFlexItem">
<% for (var i = 0; i < sqTweetData.length; i++) { %>
<div class="activeTweet">
<div class="activeTweet__avatar"><img src="<%= sqTweetData[ i ].user.profile_image_url %>"></div>
<div class="activeTweet__wrapper">
<div class="activeTweet__name"> <%= sqTweetData[ i ].user.name %> </div>
<div class="activeTweet__message"><%= sqTweetData[ i ].text %></div>
</div>
</div>
<% } %>
</section>
</script>
第11行的console.log工作正常,所以我假设我的变量对象设置正确。似乎在部分和其他javascript之间存在脱节。
有什么想法吗?
答案 0 :(得分:1)
这是一个范围问题。 sqTweetData
说这是未定义的,因为它正是如此。 window["sqTweetData"]
不存在。当您在函数之外声明一个变量时,它会插入到全局命名空间中,在这种情况下,浏览器window
就是命名空间。
由于您使用var
关键字在家中声明变量,因此该变量只能在<{strong> Home
函数中访问。因此,您必须将其添加为this.sqTweetdata
并将其与对象一起返回,或者添加一个单独的getTweetData()
来返回变量,或者沿着这些行添加某些内容。
查看这个非常全面地涵盖范围界定的答案: https://stackoverflow.com/a/500459/3629438
你的属于:
高级:关闭
var a = 1;
var six = (function() {
var a = 6;
return function() {
// JavaScript "closure" means I have access to 'a' in here,
// because it is defined in the function in which I was defined.
alert(a);
};
})();
修改强>
在你的情况下,你会按照
的方式做点什么var Home = (function() {
// ....... //
function getTweetData() {
return sqTweetData;
}
return {
init: initHome,
get: getTweetData
};
})();