1
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 数组的控制台日志的屏幕截图。

在此处输入图像描述

4

2 回答 2

7

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

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

区别在于 Backbone Model 对象比基本的 javascript 对象更复杂,并且不get通过仅检索object['attrName'].

于 2013-08-14T17:06:02.327 回答
3

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

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

var currentVideosDurations = _.invoke(currentVideos, "get", "duration");
于 2013-08-14T17:31:21.853 回答