Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • 12:33
    frank-dspeed commented #5383
  • 12:23
    frank-dspeed commented #5384
  • Jan 22 21:54

    phillipskevin on master

    Update dist for release (compare)

  • Jan 22 21:54

    phillipskevin on v6.3.0

    Update dist for release 6.3.0 (compare)

  • Jan 22 21:49
    greenkeeper[bot] closed #5457
  • Jan 22 21:49

    greenkeeper[bot] on can-dom-mutate-2.0.8

    (compare)

  • Jan 22 21:49

    phillipskevin on master

    pinning can-dom-mutate dependen… (compare)

  • Jan 22 21:46

    greenkeeper[bot] on @octokit

    (compare)

  • Jan 22 21:41

    greenkeeper[bot] on @octokit

    chore(package): update @octokit… (compare)

  • Jan 22 21:34

    phillipskevin on update-deps

    (compare)

  • Jan 22 21:32

    phillipskevin on master

    Update major packages to sync c… Update to latest patch releases… Fix steal imports to be inexact and 6 more (compare)

  • Jan 22 21:32
    phillipskevin closed #5451
  • Jan 22 21:02
    bmomberger-bitovi synchronize #5451
  • Jan 22 21:02

    bmomberger-bitovi on update-deps

    Update can-control to latest (compare)

  • Jan 21 14:21
    frank-dspeed commented #5460
  • Jan 21 14:13
    frank-dspeed commented #5460
  • Jan 21 14:12
    frank-dspeed commented #5460
  • Jan 21 14:10
    frank-dspeed commented #5460
  • Jan 21 13:37
    jvkdev starred canjs/canjs
Viktor Busko
@Lighttree
well...if your value was list pushing new items there didn't call set and with value it may be different, but still
Kevin Phillips
@phillipskevin
streams allow you to define a property based on the current value of other properties as well as the change events of other properties
an example we often give is the City/State picker on http://www.place-my-order.com/restaurants
City changes
  • to the selected city
  • to null when any change event happens with state
withOUT streams you had to use a setter on state in order to accomplish this
Viktor Busko
@Lighttree
So the benefit is in encapsulation of property behavior in one place right ?
Right - putting all the logic for each property within its own property definition is a big improvement
this is a trivial example... but in larger apps, you can end up with the definition for a property in many places across many different files
it's really easy for this pattern to snowball into a huge problem that makes your code very difficult to change without breaking something else
Viktor Busko
@Lighttree
Ok thanks, I think I got the idea.
Kevin Phillips
@phillipskevin
streams are a good solution to any problem like this
but they're pretty hard to learn
the value behavior is a lot simpler and solves most of the same problems
Frank Lemanschik
@frank-dspeed
why do you think streams are hard to learn
they are a simple observe able
that emit values
Kevin Phillips
@phillipskevin
because I've tried to teach them to people
and people find them confusing
Frank Lemanschik
@frank-dspeed
hmmm i like teaching streams
i am at present preparing a biger series of streaming tutorials maybe your interrested in them will send you url once released
<form>
    <input class="x"> + <input class="y"> = <span class="result"></span>
</form>
Using most.js to make it reactive:
import { fromEvent, combine } from 'most'

const xInput = document.querySelector('input.x')
const yInput = document.querySelector('input.y')
const resultNode = document.querySelector('.result')

const add = (x, y) => x + y

const toNumber = e => Number(e.target.value)

const renderResult = result => {
    resultNode.textContent = result
}

export const main = () => {
    // x represents the current value of xInput
    const x = fromEvent('input', xInput).map(toNumber)

    // y represents the current value of yInput
    const y = fromEvent('input', yInput).map(toNumber)

    // result is the live current value of adding x and y
    const result = combine(add, x, y)

    // Observe the result value by rendering it to the resultNode
    result.observe(renderResult)
}
ups
with canjs all this is even much more easy
Kevin Phillips
@phillipskevin
I like teaching streams too
Frank Lemanschik
@frank-dspeed
yaa stream love
:D
i think they are the most logic for long running processes
Kevin Phillips
@phillipskevin
but if you're teaching canjs and you need to solve the one problem mentioned above (resetting city when state changes), then having to teach all of streams is a bit of overkill
Frank Lemanschik
@frank-dspeed
and the clean up is like magic
so out of memory managment view this is the holy gral
for any resource managment
did you use most.js ?
or only kefir if so look into most js it has magic stuff like multicast streams
i design whole apps with it i will even rewrite canjs to use only that :)
Thomas Sieverding
@Bajix
I bet it would be easy to make most.js compatible with can-streams
Frank Lemanschik
@frank-dspeed
but thats hard work i first start with can-quee
as a stream is a queue and most has shedulers
its all a dream
in some month a canjs app could be a monadic self healing stream
the ecosystem of most is growing to be the defacto framework of frameworks
Kevin Phillips
@phillipskevin
I usually use RxJS
Frank Lemanschik
@frank-dspeed
look into most you will laught about rhx
rx
see the benchmark but the ecosystem is also the most amazing
its also nativ promise compatible
so works for any canjs value ;)
here the amazing docs