【问题标题】:How would I modify this ember.js function to return an Enumerable or Array我将如何修改此 ember.js 函数以返回 Enumerable 或 Array
【发布时间】:2012-10-10 17:25:21
【问题描述】:

我刚开始学习 ember.js,跟着一些教程和created a working example here:

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 我想用作数组索引)。

我所有使用数组的尝试都破坏了 ember 在 ajax 调用填充轨道时更新视图的神奇能力。

任何人都可以修改http://jsfiddle.net/ZEzwn/ 以返回一个 Enumerable(最好是一个数组)但仍然自动更新视图吗?

【问题讨论】:

  • 我不确定你想做什么。你说“我想得到一个数组”,但这就是你所拥有的(曲目)。无论如何,你不应该使用 id 作为数组键,请参阅 Ryan Bigg 帖子:ryanbigg.com/2012/10/javascript-arrays-and-objects
  • 好的,我可以使用tracks.filterProperty('href', 'spotify:track:7x7F7xBqXqr0L9wqJ3tuQW') 拉出一个轨道。这昨天不起作用,但现在它起作用了!感谢您花时间回复,将此归结为操作员错误!
  • 我已经添加了一些解释并使其成为答案

标签: ember.js


【解决方案1】:

由于您的方法已经返回一个数组(因为您启用了 Ember 原型扩展),因此:

var tracks = [];

等价于

var tracks = Ember.A();

在 ajax 请求成功时,您只是在填充数组,因此您可以使用 Ember.Array 方法,如 filterProperty

关于使用 id 作为数组键的一件事,你真的不应该像Ryan Bigg says in its blog

但是,如果变体的 id [稍高一些,例如] 1,013,589,413,那么您就会遇到问题。

在这种情况下,JavaScript 将创建一个 10 亿、1300 万、589 万、414 个元素的数组。全部存储一个值,就在最后。

【讨论】:

    【解决方案2】:

    好的,正如 louiscoquio 指出的那样,这现在可以工作了,轨道是一个可枚举的对象,我可以做类似的事情

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

    tracks.getEach('name')

    tracks.get('firstObject')

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-26
      • 1970-01-01
      相关资源
      最近更新 更多