2013-01-04 63 views
0

有我在许多用于编码地图的地方看到了如下的例子:我运行这似乎是最新的飞镖编辑飞镖encodeURIComponent方法Map.keys()

#import('dart:uri'); 
String encodeMap(Map data) { 
    return Strings.join(data.getKeys().map((k) { 
     return "${encodeUriComponent(k)}=${encodeUriComponent(data[k])}"; 
    }), "&"); 
} 

(版本0.2.9_r 16323) 在上面的例子中,对于Dart M2,我认为data.getKeys()已经更改为data.keys(),这是我修改过的。未找到方法:

异常:的NoSuchMethodError

然而,在编辑器中运行它时,我得到一个错误 '呼叫'”

我有2个问题:

  • 我想知道上面的代码是否仍然可以在M2中使用指定的更改(Map.keys())?
  • 我在想如果上面的代码做了一些不同的事情:JSON.stringify(data);

欢迎任何其他指针。

TIA。

回答

0

两个变化做:

  • import语法发生了变化。
  • getKeys()方法成为一个叫做keys的吸气剂。

工作版本:

import 'dart:uri'; 

String encodeMap(Map data) { 
    return Strings.join(data.keys.map((k) { 
     return "${encodeUriComponent(k)}=${encodeUriComponent(data[k])}"; 
    }), "&"); 
} 

encodeMap产生的String是由JSON.stringify产生的一个很大的不同,你可以在波纹管段看到:

main() { 
    final map = {"a":"b", "c":"d"}; 
    assert(encodeMap(map) == "a=b&c=d"); 
    assert(JSON.stringify(map) == '{"a":"b","c":"d"}'); 
} 
+0

非常感谢你的答案。它回答了我的两个问题。我错过了getKeys()。map()改变为keys.map()而不是keys()。map()的细节。至少,encodeMap()中解决方案的语法对我来说相当隐秘。有没有类似JSON.stringify()来处理这个功能是否有意义?非常感谢,因为我花了很长时间试图解决对我来说是一个问题。尽管我认为Dart非常棒,但jquery似乎可以更好地处理这个问题。 $阿贾克斯()。我认为Dart没有(还)有类似的东西。 –