【问题标题】:Is there a map() function in ExtJS?ExtJS 中有 map() 函数吗?
【发布时间】:2010-09-20 01:55:51
【问题描述】:

ExtJS 有 Ext.each() 函数,但是有没有 map() 也隐藏在某个地方?

我已经很努力了,但没有找到任何可以填补这个角色的东西。像 Ext 这样大的 JS 库显然必须具备。

或者当 Ext 真的不包含它时,将它添加到 Ext 的最佳方法是什么?当然,我可以写:

Ext.map = function(arr, f) { ... };

但这真的是正确的做法吗?

【问题讨论】:

  • 您希望在 'map' 中有哪些不同的行为,而不是在 'each' 中?不只是 Ext.prototype.map = Ext.each.toSource();帮忙?
  • 'each' 只是将函数应用于数组的元素,但不返回任何内容。 'map' 还应该返回每个函数调用的结果。

标签: javascript map extjs


【解决方案1】:

至少从 Ext4 开始,包括 Ext.Array.map。

http://docs.sencha.com/extjs/5.0.1/#!/api/Ext.Array-method-map

【讨论】:

    【解决方案2】:

    由于map 更像是一个实用程序,我不明白为什么会有任何特殊的方式将其插入 Ext 命名空间;您建议的方式会很有效,尽管您可能希望这样做:

    if(Ext && typeof(Ext.map) == "undefined") { // only if Ext exists & map isn't already defined
       Ext.map = function(arr, f) { ... };
    }
    

    似乎这样就可以了……但是,我不使用 ExtJS,所以我不知道。我确实看过他们的文档,在这种情况下似乎没有什么特别的事情要做。

    【讨论】:

      【解决方案3】:

      看来,我这里的大学正在使用ext-basex,它使用 map() 和其他方法扩展了 Array.prototype。

      所以我可以写:

      [1, 2, 3].map( function(){ ... } );
      

      问题解决了。

      【讨论】:

      • 一年多过去了,Ext 仍然没有 map()。尽管它们有 Ext.invoke() 和 Ext.pluck(),它们只是 map() 的特例。无论如何......现在我们已经放弃了 ext-basex,它包含了太多我们不需要的东西,并编写了我们自己的小库,将 map() 和其他有用的方法添加到 Array。
      【解决方案4】:

      使用 Ext+Prototype 或 Ext+Jquery 等混合库之一怎么样?我已经使用 Extjs+Prototypejs 有一段时间了,它对我在 Extjs 代码中的工作有很大帮助,同时还有更熟悉的prototypejs。

      http://extjs.com/products/extjs/build/ 将构建一个自定义 tar/zip 文件,其中包含运行 extjs 和 (prototypejs|jquery|yahooUI) 所需的所有文件。

      【讨论】:

      • 正如我所说,我已经通过使用 ext-basex 解决了我的问题,但我会记住您的建议。
      【解决方案5】:

      ExtJS 不会取代 Javascript 语言本身。数组函数不是 ExtJS 核心的重点。但是有一个特殊的 Ext.Array 对象类型。您可以自行扩展。

      编辑:不是 Ext.Array,而是扩展的 Array 对象。

      【讨论】:

      • 没有 Ext.Array。 Ext 实际上用 indexOf() 和 remove() 方法扩展了 Array.prototype 本身。
      • 是的,我的层次结构不匹配。它只是扩展的 Array 对象。但这更适合您的情况。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-08
      • 1970-01-01
      • 1970-01-01
      • 2011-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多