Backbone.js 下划线.js“;“一些”;不返回布尔值

Backbone.js 下划线.js“;“一些”;不返回布尔值,backbone.js,coffeescript,underscore.js,backbone-layout-manager,Backbone.js,Coffeescript,Underscore.js,Backbone Layout Manager,我使用下划线.js检查列表中的元素是否为true。下面是它的coffeescript代码: uploading = _(@getViews ".file-forms").some (view) -> view.uploading is true 打印“上载”,而不是返回true或false,可提供: uploading y _chain: true _wrapped: false __proto__: Object 以下是下划线“some”的定义: 此外

我使用下划线.js检查列表中的元素是否为true。下面是它的coffeescript代码:

uploading  = _(@getViews ".file-forms").some (view) ->
    view.uploading is true
打印“上载”,而不是返回true或false,可提供:

uploading
  y
   _chain: true
   _wrapped: false
   __proto__: Object
以下是下划线“some”的定义:

此外,GetView是主干布局管理器中的一个函数,定义如下:

以下是其他变量的输出,这些变量可能使调试更容易:

_(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: function(fn) {
  //...
  if (typeof fn === "string") {
    return _.chain([this.views[fn]]).flatten();
  }
  //...
}
如果您查看所有可能的返回值,您将看到它们都是调用的结果,而没有调用剥离链接包装器。这意味着
getViews
返回的是可链接的下划线包装,而不是您期望的简单数组

您不应该执行
(@getViews'…')
,因为
getViews
返回值已用下划线包装。您应该能够执行以下操作:

uploading = @getViews(".file-forms").some((view) -> view.uploading is true).value()


顺便说一句,我对你的
v有点怀疑;对
true
false
进行显式检查可能会导致奇怪的行为(尤其是在咖啡脚本中,
实际上是
)。我可能会使用
(v)->v.upload
作为函数。当然,这是个人偏好。

getViews
似乎返回了一个预包装、链接的下划线对象供您使用。在这种情况下,再次对其调用
\uu
不会产生任何效果。您可以放置
upload.value()
以获得所需的结果。

您可以显示您的输出javascript吗?看起来它调用了
chain()
而没有
value()
我用console.log打印它(上传)(输出如上所示)。“输出javascript”是指通过编译咖啡脚本生成的javascript吗?您只需在此处复制粘贴coffeescript即可看到:在javascript/下划线中的“Try coffeescript”下,它可以正常工作。你要么有咖啡脚本问题,要么有脊椎问题。你能在你的环境中显示
getViews
和literal
的结果吗