3

underscore.jsを使用して、リスト内の要素がtrueであるかどうかを確認しています。これがそのコーヒースクリプトコードです:

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

trueまたはfalseを返す代わりに、「uploading」を出力すると、次のようになります。

uploading
  y
   _chain: true
   _wrapped: false
   __proto__: Object

アンダースコアの「some」の定義は次のとおりです:http://underscorejs.org/#some

さらに、getViewsは、https ://github.com/tbranyen/backbone.layoutmanager/wiki/Nested-viewsで定義されているバックボーンlayoutmanagerの関数です。

これをデバッグしやすくする可能性のある他の変数の出力は次のとおりです。

_(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)}
4

2 に答える 2

2

を見ると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奇妙な動作を引き起こす可能性があります(特に、is実際にあるCoffeeScript===では)。(v) -> v.uploading代わりに関数として使用するでしょう。もちろん、これは個人的な好みです。

于 2013-01-31T00:01:36.637 に答える
2

getViews消費のために、事前にラップされ、チェーン化されたアンダースコアオブジェクトを返しているようです。_この状況では、再度呼び出しても何も起こりません。あなたが望む結果を得るために置くことができuploading.value()ます。

于 2013-01-31T00:02:02.460 に答える