2

私はember.jsの学習を始めたばかりです。いくつかのチュートリアルに従い、ここで実用的な例を作成しました

App.Track.reopenClass({
    find: function() {
        var tracks = [];

        $.ajax({
            url: 'http://ws.spotify.com/lookup/1/.jsonuri=spotify:album:6J6nlVu4JMveJz0YM9zDgL&extras=track',
            dataType: 'json',
            context: this,
            success: function(data, textStatus, jqXHR) {
                $.each(data.album.tracks, function(index, value) {
                    track_id = value.href.replace("spotify:track:", "");
                    tracks.addObject(App.Track.create(value));
                    // I would rather do something like:
                    // tracks[track_id] = App.Track.create(value)
                });
            }
        })
        return tracks;
    }
});

この関数はAPIにヒットし、返されたデータをループして、tracksオブジェクト(tracks.addObject(App.Track.create(value));)にデータを入力して返します。

この関数から通常のオブジェクトを取得するのではなく、Enumerable / Arrayを取得して、filterPropertyで操作したり、idでトラックを引き出したりしたいと思います(配列インデックスとして使用したいtrack_idがあります)。

配列を使用しようとする私の試みはすべて、ajax呼び出しがトラックに入力されたときにビューを更新する残り火の魔法の能力を壊しました。

誰かがhttp://jsfiddle.net/ZEzwn/を変更してEnumerable(できれば配列)を返すことができますが、それでもビューは自動的に更新されますか?

4

2 に答える 2

1

メソッドはすでに配列を返しているので(Emberプロトタイプ拡張が有効になっているため)、次のようにします。

var tracks = [];

と同等です

var tracks = Ember.A();

Ember.Arrayajaxリクエストが成功すると、配列にデータを入力するだけなので、のようなメソッドを使用できますfilterProperty

idを配列キーとして使用することについての1つのことは、Ryan Biggがブログで述べているように、実際にはすべきではありません。

ただし、バリアントのIDが[1,013,589,413のように少し高い]場合は、問題が発生し始めます。

その場合、JavaScriptは10億、1300万、5億8900万、414の要素配列を作成します。最後に1つの値を格納するためのすべて。

于 2012-10-11T09:11:43.763 に答える
0

louiscoquioが指摘したように、これは現在機能しています。トラックは列挙可能なオブジェクトであり、次のようなことができます。

tracks.filterProperty('href', 'spotify:track:7x7F7xBqXqr0L9wqJ3tuQW')

tracks.getEach('name')

tracks.get('firstObject')

于 2012-10-11T09:11:50.873 に答える