1

我被以下情况困住了。我有一个 select 语句,它使用当前范围内的函数me。我该如何me进入选择功能?

var me = this;
var results = Enumerable
              .from(jsonData) 
              .select('x,i=>{abbr:me.transform(x), name:x}')
              .toArray(); //me.transform(x) will hit error

'me' 是动态生成的对象的一个​​实例,并且me.transform(x)使用 'me' 中的其他依赖项也可以正常工作。这意味着我不能创建 'me.transform()' 全局函数。


编辑

var me = this;
var results = Enumerable
              .from(jsonData) 
              .select(function(x,i){
                  return {abbr:me.transform(x), name:x};
              }).toArray(); 

实际上,这种修改会起作用,但是,我想了解如何使快捷语法起作用。

4

2 回答 2

2

您可以做的是将您的对象投影到一个复合对象,该对象既包含集合中的项目,也包含您要引入查询的对象。

您可以使用此Capture函数来捕获变量:

function Capture(bindings, name) {
    var benumerable = Enumerable.From(bindings),
        itemname = name || 'Item';
    return function (e) {
        return e.Select(function (item) {
            return benumerable.Concat(Enumerable.Return({ Key: itemname, Value: item }))
                .ToObject("$.Key", "$.Value");
        });
    };
}

Let在绑定中使用它。

var query = Enumerable.From(data)
    .Let(Capture({ Me: me }))
    .Select("{ abbr: $.Me.transform($.Item), name: $.Item }")
    .ToArray();
于 2013-12-19T05:08:17.763 回答
0

我的错。你是这个意思吗?

var me = this;
var results = Enumerable
          .from(jsonData) 
          .select('x,i=>{abbr:' + me.transform(x) + ', name:x}')
          .toArray(); //me.transform(x) will hit error
于 2013-12-08T09:15:04.407 回答