3

ember.js ライブラリ (ember-1.0.0-rc.7.js) をインクルードしようとすると、奇妙なことがわかります。

私が持っているjavacodeは、javascript配列を出力します:

<script type="application/javascript">
var songs = [ 'a','b','c'];

console.debug(songs.toString());
for(key in songs)
{
    console.debug(songs[key]);
}

</script>

ライブラリを含めないと、コンソールに a 、 b 、 c が出力されます。ただし、それを含めると、a、b、cの出力が開始されますが、すべての機能が...

例:

function (idx) {
    return this.objectAt(idx);
  }
function superWrapper() {
    var ret, sup = this._super;
    this._super = superFunc || K;
    ret = func.apply(this, arguments);
    this._super = sup;
    return ret;
  }
function (key) {
    return this.mapProperty(key);
  }

これが ember.js ライブラリで発生する理由と、この問題を解決するにはどうすればよいですか?

アドバイスをいただければ幸いです、ありがとう、D

4

2 に答える 2

2

デフォルトでは、Ember は組み込みのプロトタイプを拡張しArray.prototypeて、追加のメソッドを提供したり、サポートしていないブラウザーに ES5 メソッドをシムしたりします。オブジェクトの列挙可能なプロパティをfor...in反復するため、これらのメソッドが表示されます。これらには、プロトタイプ チェーンを通じて継承されたものも含め、すべてのプロパティが含まれます。

代わりに、通常のforループを使用して配列を反復処理する必要があります。

for(var i=0; i<songs.length; i++) {
    console.debug(songs[i]);
}

これは、実際の配列要素、つまり数値キーを持つプロパティのみを対象とします。ただし、ES5 を使用するなど、より良い方法がありますArray.forEach(古いブラウザーでは Ember によって調整されています)。

songs.forEach(function(song, i) {
    console.debug(song);
});

必要に応じて、Ember のプロトタイプ拡張機能Ember.EXTEND_PROPERTIESを使用する予定がない場合、または他のライブラリ/スクリプトと競合する可能性がある場合は、構成して無効にすることができます。Ember のドキュメントには、この問題に特化したページ全体があります。

于 2013-08-28T22:10:30.717 に答える