some Underscore methods을 컬렉션에 병합하는 것은 약간 불완전합니다. collection.some_mixed_in_underscore_method()
이라고 말하면, 콜렉션의 모델 안의 애트리뷰트에 언더 스코어 (Underscore) 메소드가 적용되도록 콜렉션이 등 뒤에서 백본의 일부를 푸십시오. 그것은 일종의 다음과 같이 작동
console.log(collection.chain());
당신이 chain
는 것을 볼 수 있습니다 : 그런 식으로 작동하지 않습니다
var ary = _(this.models).map(function(m) { return m.attributes });
return _(ary).some_mixed_in_underscore_method();
그러나 collection.chain()
을 chain
은 이렇게 직접 그래서 만약 컬렉션의 models
랩 일련의 모델을 래핑하는 객체를 제공합니다. 모델에 is_checked
속성이 없으므로 (model.is_checked
이 없음) is_checked
개의 속성이 있습니다 (즉, model.get('is_checked')
및 model.attributes.is_checked
이 있음). 모든 잘못 곳
이제 우리는 볼 수 있습니다
collection.chain().where({'is_checked':true})
모델은 is_checked
속성이 없습니다. 특히 is_checked
이 true
이고 where
이후의 모든 항목이 빈 배열로 작업하는 모델은 없습니다.
이제 우리는 어디로 가는지 알았으니 어떻게 수정해야합니까? '당신의 천국 당신이 id
의로를 작성하지 않은으로 아직
collection.chain()
.filter(function(m) { return m.get('is_checked') })
.pluck('id')
.value();
그러나, id
이없는 당신의 모델이 S와 : 글쎄, 당신은 쉽게 모델을 풀 수 있도록 filter
대신 where
을 사용할 수 있습니다 t는 서버에 접속하여 id
을 얻었으므로 undefined
어레이를 다시 가져올 것입니다. 당신은 몇 가지 id
의 추가하는 경우 :
var collection = new App.OptionCollection([
{id: 1, 'is_checked': true},
{id: 2, 'is_checked': true},
{id: 3, 'is_checked': false}
]);
을 당신은 당신이 찾고있는 [1,2]
를 얻을 수 있습니다.
데모 : http://jsfiddle.net/ambiguous/kRmaD/
우수 설명. 감사! 제 실제 환경에서는 컬렉션이 서버에서 가져 오므로 ID가 있습니다. – Bart
'pluck'는'model.get()'을 호출하지 않고 대신 모델의 속성을 직접 보았기 때문에 대부분의 애트리뷰트에서 동일한 문제를 갖습니다. 'id'는 객체에 정의 된 특별한 속성이므로 작동 할 수 있지만 is_checked와 같은 다른 속성은'undefined'를 반환합니다. – Spig