作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 jQuery 循环遍历数组并将每个值与模型的用户 ID 进行比较。如果找到匹配项,我只会显示特定文本。
$.each current_user.get('following_ids'), (i, e) =>
console.log(@model.get('user')._id == e)
if @model.get('user')._id == e
@is_following = true
//break from loop if condition is met
return false
else
@is_following = false
//else continue looping through
return true
if @is_following
$(@el).find('.user_info .follow a').text "following"
else
$(@el).find('.user_info .follow a').text "follow"
但是我的代码不起作用,它总是返回“follow”文本。我在这里做错了什么?
最佳答案
大概current_user.get('following_ids')
是某种ID数组。我立即想到两种可能性:
current_user.get('following_ids')
不包含 @model.get('user')._id
,因此一切正常。following_ids
是一个字符串数组,_id
是一个数字,反之亦然。选项2需要更多解释:CoffeeScript的==
被转换为JavaScript的===
所以1 ==' 1'
在 CoffeeScript 中为 false,但在 JavaScript 中为 true。这确实使 2 成为 1 的隐藏且可能令人惊讶的变体,但它足够特殊,足以成为其自身的情况。
考虑一下您的情况的简化模拟:
$.each ['1','2','3'], (i, e) =>
if 2 == e
@is_following = true
return false
else
@is_following = false
return true
console.log @is_following
你会得到 false
因为 2 == '2'
是 false
是 CoffeeScript: http://jsfiddle.net/ambiguous/YsstH/
但是,如果我们修复类型:
$.each [1,2,3], (i, e) =>
# Only the array changes...
console.log @is_following
然后我们得到了我们期望的true
结果:http://jsfiddle.net/ambiguous/CxHXu/
无论如何,由于您使用的是 Backbone,因此您有下划线,因此您可以只使用 _.any
:
@is_following = _(current_user.get('following_ids')).any (id) => @model.get('user')._id == id
或更好:
want_this_id = @model.get('user')._id
@is_following = _(current_user.get('following_ids')).any (id) -> want_this_id == id
不过,您仍然需要解决类型问题。
关于jquery - 错误循环遍历循环并在满足条件时中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10875964/
我是一名优秀的程序员,十分优秀!