我正在使用下划线.js来检查列表中的元素是否为真。这是它的咖啡脚本代码:
uploading = _(@getViews ".file-forms").some (view) ->
view.uploading is true
打印"上传",而不是返回真或假,给出:
uploading
y
_chain: true
_wrapped: false
__proto__: Object
以下是下划线"一些"的定义:http://underscorejs.org/#some。
此外,getViews是来自主干布局管理器的函数,定义如下:https://github.com/tbranyen/backbone.layoutmanager/wiki/Nested-views
以下是其他变量的输出,可能使其更易于调试:
_(this.getViews(".file-forms"))
y
_chain: true
_wrapped: Array[1]
0: d
length: 1
__proto__: Array[0]
__proto__: Object
_
function (a){if(a instanceof y)return a;if(this instanceof y)this._wrapped=a;else return new y(a)}
如果你看一下getViews
,你会看到发生了什么:
getViews: function(fn) {
//...
if (typeof fn === "string") {
return _.chain([this.views[fn]]).flatten();
}
//...
}
如果您查看所有可能的返回值,您会发现它们都是_.chain
调用的结果,没有_.value
调用来剥离链接包装器。这意味着getViews
返回的是可链接的下划线包装器,而不是您期望的简单数组。
您不应该这样做_(@getViews '...')
因为getViews
返回值已经包装在下划线中。您应该能够执行以下操作:
uploading = @getViews(".file-forms").some((view) -> view.uploading is true).value()
顺便说一句,我对你的v.uploading is true
测试有点怀疑;对true
和false
的显式检查可能会导致奇怪的行为(特别是在CoffeeScript中,is
真的很===
)。我可能会使用 (v) -> v.uploading
作为函数。当然,这是个人喜好。
getViews
似乎返回了一个预先包装并链接的下划线对象供您使用。在这种情况下,再次调用_
没有任何作用。您可以投入uploading.value()
以获得所需的结果。