Great - thanks Jamie (and Mike for the FAQ).

On 27 March 2015 at 22:37, Jamie Orchard-Hays <[email protected]> wrote:
> Subscribing to subscriptions is very useful and works great.
>
>
> On Mar 27, 2015, at 6:19 PM, Colin Yates <[email protected]> wrote:
>
>> Is it ok to reference subscriptions in another subscription? I can't
>> see any conceptual reason why not but better safe than sorry...
>>
>> On 27 March 2015 at 21:15, Mike Thompson <[email protected]> wrote:
>>> On Saturday, March 28, 2015 at 7:52:13 AM UTC+11, Colin Yates wrote:
>>>> Hi Mike, yep, that is what I meant by "> I can work around this - the
>>>> subscription code typically delegates to a 'plain' defn so I can
>>>> retrieve the data from the db and call the same defn, but sometimes
>>>> that jars a bit." :).
>>>>
>>>>
>>>> On 27 March 2015 at 20:47, Mike Thompson <[email protected]> wrote:
>>>>> On Saturday, March 28, 2015 at 7:36:26 AM UTC+11, Colin Yates wrote:
>>>>>> I have various chunks of reference data, say a tree or a list of _all_ 
>>>>>> (i.e. active and historical) entities. I then have various subscriptions 
>>>>>> which refine that view, for example:
>>>>>> - only active
>>>>>> - only active but including a given id
>>>>>>
>>>>>> In the handler I sometimes need access to this data, but according to 
>>>>>> the re-frame doc:
>>>>>>
>>>>>> "Rules:
>>>>>>
>>>>>> components never source data directly from app-db, and instead, they use 
>>>>>> a subscription.
>>>>>> subscriptions are only ever used by components (they are never used in, 
>>>>>> say, event handlers)."
>>>>>>
>>>>>> I can work around this - the subscription code typically delegates to a 
>>>>>> 'plain' defn so I can retrieve the data from the db and call the same 
>>>>>> defn, but sometimes that jars a bit.
>>>>>>
>>>>>> The fact it is useful for me to do something not only discouraged but 
>>>>>> actively against the rules makes me question my design somewhat; what is 
>>>>>> the rationale for not allowing an event handler to view a subscription? 
>>>>>> Am I wrong in viewing a subscription as merely a view on the data in 
>>>>>> which case I don't see the danger...
>>>>>>
>>>>>> I get that components should be divorced from the structure of the DB 
>>>>>> and event handlers necessarily need to know the structure but I see a 
>>>>>> subscriptions as more than just structure - it sometimes applies 
>>>>>> transformations that I would want to re-use.
>>>
>>> I'll expand ...
>>>
>>> Think about a subscription handler as:
>>>   1.  A query function  (db) -> val  ...
>>>   2.  some reaction wrapping around the outside
>>>
>>> The reaction wrapping is very useful for when you need "a stream" of 
>>> updates over time. Components need to get a told when "app-db" changes.
>>>
>>> But event handlers don't need a stream. They need a one-off value, based 
>>> off the db param they have been supplied.
>>>
>>> If you do try to use a subscription in an event handler, you'll get a 
>>> memory leak.  The reaction won't get properly "disposed" (it is 
>>> automatically done for you when a Signal chain feeds through into a 
>>> component).
>>>
>>> So, repeating myself:  event handlers don't need a constant stream of 
>>> updates. They don't need a subscription.  All they need to do is call a 
>>> function on "db" to get a value, so factor that function out of the 
>>> subscription and make it available.
>>>
>>> --
>>> Mike
>>>
>>>
>>>
>>> --
>>> Note that posts from new members are moderated - please be patient with 
>>> your first post.
>>> ---
>>> You received this message because you are subscribed to the Google Groups 
>>> "ClojureScript" group.
>>> To unsubscribe from this group and stop receiving emails from it, send an 
>>> email to [email protected].
>>> To post to this group, send email to [email protected].
>>> Visit this group at http://groups.google.com/group/clojurescript.
>>
>> --
>> Note that posts from new members are moderated - please be patient with your 
>> first post.
>> ---
>> You received this message because you are subscribed to the Google Groups 
>> "ClojureScript" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected].
>> To post to this group, send email to [email protected].
>> Visit this group at http://groups.google.com/group/clojurescript.
>
> --
> Note that posts from new members are moderated - please be patient with your 
> first post.
> ---
> You received this message because you are subscribed to the Google Groups 
> "ClojureScript" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/clojurescript.

-- 
Note that posts from new members are moderated - please be patient with your 
first post.
--- 
You received this message because you are subscribed to the Google Groups 
"ClojureScript" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/clojurescript.

Reply via email to