0

Скажем, у меня есть два свойства Bacon.js. Один - это дочерний объект - возможно, просто его имя. Другой объект собственности с нарядом, который он или она носит, - цвет брюк и цвет рубашки.Как слить два свойства в Bacon.js

В моем случае я использую Angular-Bacon для создания свойств из переменных области AngularJS.

Как получить свойство, которое объединяет два вместе? Я ожидаю, что я мог бы сделать что-то вроде следующего (предполагается, что у меня был Lodash доступный):

var outfit = $scope.$watchCollectionAsProperty('outfit'); // {shirt: 'blue', pants: 'green'} 
var child = $scope.$watchCollectionAsProperty('child'); // {name: 'Jimmy'} 

var clothedChild = outfit.map(function(it) { 
    return _.merge(it, child.value()); 
}); 

Это не работает, хотя.

Я супер новичок в RFP, и я пытаюсь использовать Bacon в приложении Angular, но мне тяжело обворачивать его вокруг.

Любые советы будут оценены.

ответ

1

Ответ был не таким сложным, как я думал - я просто не знал, что искать, кажется.

var clothedChild = Bacon.combineWith(function(p1, p2) { 
    return _.merge({}, p1, p2); 
}, child, outfit); 
+2

Внимание! Это изменит исходный дочерний объект. Если какой-либо другой код прослушивает дочерний поток, он может или не может получить объединенный дочерний объект. Кроме того, когда родительский поток испускает новые значения, эти значения будут объединены с уже объединенным дочерним объектом. Вы можете использовать 'return _.merge ({}, p1, p2);', чтобы исправить это. – AgentME

+0

@AgentME Большое спасибо за подсказку. –

+0

'Bacon.combineWith (R.merge, ребенок, одежда)' будет делать это без изменения чего-либо – galileopy

1

Вы также можете сделать

child.combine(outfit, function(child, outfit){ 
    return _.merge({}, child, outfit); 
}); 

, который немного короче.

 Смежные вопросы

  • Нет связанных вопросов^_^