2014-05-20 5 views
0

잘 베이컨은 여전히 ​​나를 위해 하나의 큰 놀랄 일이 부착액세스 속성 값은 ...

bus = new Bacon.Bus() 
busProperty = bus.toProperty() 

bus.push 'someValue' 

busProperty.onValue (val) -> 
    console.log val 

이 방법은 아무 것도 전혀 콘솔에 기록되지 않습니다. 나는 틀린 각도에서 아마보고있다, 그러나 나는 기대하고있다, 저 재산은 최신 가치 인 무엇 이건을 제공한다. 분명히, 그것은

busProperty.log() 

bus.push 'someValue' 

busProperty.onValue (val) -> 
    console.log val 

갑자기 내가 무엇입니까 'someValue와'

이 두 번 기록 ... 그 쉬운 일이 아니다. 즉, 부동산이 소비자가있을 때까지는 물가 가치에 관심이 없다는 뜻입니까? 어떻게 든이를 극복 할 수 있습니까? Property에 값을 저장하는 것에 대해 빈 소비자를 붙일 필요가 있다는 것은 다소 어리석은 것처럼 보입니다.

이것은 내 앱 디자인의 일부로, 소비자가 연결되기 전에 스트림에 가치를 부여합니다. 그러나 나는 그 값에 대해 과거로부터 신경을 쓰고 있습니다. 본질적으로 Promise/A의 동기 버전을 찾고 있습니다.

답변

0

이것은 알려진 문제이지만 "설계 상"입니다. 자주 묻는 질문 항목 Why isn't my Property updated? 설명 : 는 청취자가없는 경우 여기에서 일어나고있는 것은 당신의 속성이 업데이트되지 것입니다

. onValue를 사용하여 실제 리스너를 추가하기 전에 속성이 활성화되지 않습니다. 버스 아래에있는 을 듣지 않습니다. 누군가가 관심을 가질 때까지 입력을 무시합니다. 그래서 모두 은 모든 베이컨 스트림과 속성의 "게으름"으로 귀결됩니다. 이 도 주요 기능입니다. 구독자가 추가되면 스트림은 소스에 자동으로 "플러그 인"되고 구독자가 더 많으면 가입자가 없을 때 스트림이 연결됩니다.

대신 Bacon.Model을 사용해보세요. 그러면 에 일련의 추가 기능이있는 "설정 가능한 속성"이 제공됩니다.

+0

고마워. 그 생각은 다소 재미있어 보이지만, 나는 그 생각을 좋아하지 않는다. 나는 누군가에 의해 가치를 바꿀 수있는 전체 모델을 지나쳐야 만한다. 그래서 내가 Property를 좋아합니다. 가치를 바꾸는 수단을 제공하지 않습니다. 물론'get' 메서드를 래핑 할 수는 있지만, 번거롭지 않고 다른 스트림에서도 사용할 수는 없습니다. – FredyC

+0

좋아, 나는 당신의 대답을 받아 들일 것이다. 왜냐하면 그것은 꽤 유효하기 때문이다. 나는 현재의 시나리오에서 모델을 사용하지 않고 전체적으로 문제에 대한 접근 방식을 변경했습니다. 그러나이 모델은 나중에 확실히 사용할 수 있습니다. – FredyC

+0

어쩌면 [자신의 대답을 작성하십시오] (http://stackoverflow.com/help/self-answer) 어떻게 접근 방식을 변경 했습니까? 그리고 어쩌면 그것을 받아 들일 수도 있습니다, 그냥 upvote - 기본적으로 내가 한 모든 FAQ 항목을 인용 한 것입니다. – Bergi