2012-10-10 97 views
2

我剛剛開始學習ember.js可枚舉或數組,我按照一些教程和created a working example here我將如何修改這個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.addObject(App.Track.create(value));)並返回它。

而不是從這個函數得到一個普通的對象,我想獲得一個Enumerable/Array,所以我可以用filterProperty操作它或通過id拉出軌道(有一個track_id,我想用作數組索引)。

我所有使用數組的嘗試都破壞了當ajax調用填充軌道時更新視圖的不可思議的能力。

任何人都可以修改http://jsfiddle.net/ZEzwn/返回一個Enumerable(最好是一個數組),但仍然自動更新視圖?

+0

我不是確定你想要做什麼。你說「我想要一個陣列」,但這是你的(曲目)。無論如何,你應該永遠不要使用數組的密鑰,請參閱Ryan Bigg的帖子:http://ryanbigg.com/2012/10/javascript-arrays-and-objects – louiscoquio

+0

好吧,以便拉出一個軌道我可以使用'tracks.filterProperty ('href','spotify:track:7x7F7xBqXqr0L9wqJ3tuQW')'。這不是昨天工作,但現在它工作!感謝您抽出寶貴時間回覆,請將這一段放到操作員錯誤處! – alienlanes

+0

我已經添加了一些解釋並將其作爲答案 – louiscoquio

回答

1

當你的方法已經返回數組(因爲您啓用了灰燼原型擴展名),這樣做的:

var tracks = []; 

相當於

var tracks = Ember.A(); 

在Ajax請求成功,你只是填充該陣列,因此您可以使用Ember.Array方法,如filterProperty

一兩件事有關使用id作爲數組鍵,你真的不應該,因爲Ryan Bigg says in its blog

但是,如果變異的ID是[東西稍微高一點,像] 1013589413,然後你開始運行陷入困境。

在這種情況下,JavaScript會創建一個十億,一萬三千五百八十九,四百一十四個元素的數組。所有存儲一個值,在最後。

0

確定這是現在的工作,因爲louiscoquio指出,跟蹤是一個枚舉對象,我可以做的東西一樣

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

tracks.getEach('name')

tracks.get('firstObject')

相關問題