使用Underscore JS部分和for循环的未定义变量对象
Undefined variable object using Underscore JS partials and for loop
我正在编写一个twitter聚合器,我需要一些帮助来解决错误"Uncaught ReferenceError:sqTweetData is not defined"看起来控制台正在将我指向for循环。我已经设置了一个使用下划线js编译并加载到#main内容中的分部。
对于环路代码
<!-- 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>
home.js编译代码
var Home = (function() {
var sqTweetData = {
user: [{
profile_image_url : "assets/avatar.png",
name : "@johnsnow"
}],
text : "Someone once said that I know nothing..."
};
console.log("this is sqTweetData", sqTweetData);
// Partials
var tweetPartial = $('#active-tweet-partial').html();
tweetPartialCompiled = _.template( tweetPartial );
// DOM Handlers
// KICKSTART VIEW
function initHome() {
// load main content
$('#main-content').html(tweetPartialCompiled( sqTweetData ));
// bind events
}
return {
init: initHome
};
})();
第11行的console.log运行良好,所以我假设我的变量对象设置正确。javascript的部分和其余部分之间似乎存在脱节。
有什么想法吗?
这是一个作用域问题。sqTweetData
说它是未定义的,因为它正是这样。window["sqTweetData"]
不存在。当您在函数外部声明一个变量时,它被插入到全局名称空间中,在这种情况下,浏览器window
就是名称空间。
由于您使用var
关键字在home中声明变量,因此只能在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
};
})();
相关文章:
- 为什么“;未定义的“;在JavaScript中结束循环
- $.每个jquery循环打印一个“;未定义的“;对于getJSON请求后的每个元素,网格数据都会完美地打印出来
- 使用arr[i]循环遍历数组==未定义
- 为什么在循环中返回时函数返回值未定义
- 未捕获的类型错误:未定义不是函数,在中为循环创建了对象
- Waypoint的循环,退出循环后属性未定义
- 对象在循环中运行时未定义,但在按顺序执行时未定义
- 使用while循环在printArray函数中获取一个额外的未定义值
- 如何使此循环工作?它's返回未定义的语言js
- Javascript数组中未定义的值是否使用任何内存或在for in循环中迭代
- 未捕获的typeerror无法读取属性'0'for循环中未定义的
- 使用jQuery'在数组中循环;s中的每一个都会在生成字符串时在开头产生一个未定义的值
- 嵌套的“for”循环 - 数组未定义
- 在 For 循环中的闭包中未定义
- javascript 中的框架对象循环是未定义的
- 为什么以下 forEach 数组循环未返回未定义
- 当在 Javascript 中使用许多 for 循环时,输出是未定义的
- 用于从许多带有“for”循环的URL中获取HTML信息的X射线使对象未定义
- 当我把它放到setInterval循环中时,event.clientY是未定义的
- querySelectorAll循环“未定义”