下划线没有采用模型阵列?

时间:2013-08-14 16:56:04

标签: javascript backbone.js underscore.js

var currentVideos = this.get('items').pluck('video');

//  TODO: Why does pluck not work here?
var currentVideosDurations = _.map(currentVideos, function (currentVideo) {
    return currentVideo.get('duration');
});

var test = _.pluck(currentVideos, 'duration');
console.log("Test:", test);

我想知道为什么我的第二次采摘不起作用,但我的地图工作得很好?我认为这些是等效的用法。

这是一个控制台日志的屏幕截图,显示了this.get('items')和currentVideos数组。

enter image description here

2 个答案:

答案 0 :(得分:7)

主干模型对象不会在顶级javascript对象中存储模型中的get属性。 currentVideo主干模型对象实际上将属性存储在javascript对象的更深处,位于(currentVideo.attributes)中。

_.pluck(currentVideos, 'duration')检查顶级属性(例如currentVideo['duration']),该属性不存在。

区别在于Backbone Model对象比基本的javascript对象更复杂,只需检索get就不会object['attrName']属性。

答案 1 :(得分:3)

  

我认为这些是等效的用法。

不。 pluck正在访问具有该名称的属性,但get是一个方法调用。但是,要缩短map,您可以使用invoke

var currentVideosDurations = _.invoke(currentVideos, "get", "duration");