Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • Dec 13 21:20
    scala-steward opened #233
  • Dec 12 02:52

    Atry on master

    Update scalafmt-core to 2.3.2 Merge pull request #230 from sc… (compare)

  • Dec 12 02:52
    Atry closed #230
  • Dec 12 02:50
    scala-steward opened #232
  • Dec 12 02:48
    Atry closed #218
  • Dec 12 02:47
    scala-steward opened #231
  • Dec 12 02:47
    scala-steward opened #230
  • Dec 12 02:47
    scala-steward opened #229
  • Dec 12 02:46
    scala-steward opened #228
  • Dec 12 02:46
    scala-steward opened #227
  • Dec 12 02:46
    scala-steward opened #226
  • Dec 07 10:20
    Atry commented #175
  • Dec 07 10:02
    adrobisch commented #175
  • Dec 01 21:52
    Atry commented #175
  • Dec 01 12:39
    adrobisch commented #175
  • Nov 24 09:02
    adrobisch commented #175
  • Nov 24 05:37
    Atry commented #175
  • Nov 24 03:38
    Atry commented #175
  • Nov 23 21:44
    adrobisch commented #175
  • Nov 23 21:44
    adrobisch commented #175
Mustafa Kuscu
@mcku
@atry that sounds very interesting and of good utility
杨博 (Yang Bo)
@Atry
I thought it would be great to create some complex actions on stores for reusing. But I personally will not forbid to access stores directly.
杨博 (Yang Bo)
@Atry
Seperate of View Model and View could be useful or not, depends on which part tends to be changed frequently.
杨博 (Yang Bo)
@Atry

@pme123 If you like Redux's immutable store, and still want partial rendering. you can create some intermediate Bindings, which can prevent unchanged value from re-rendering

An example is here:
https://scalafiddle.io/sf/o5fWdS3/2

render2 is not triggered because store2 is unchanged.

Open your browser's inspector to see if it is re-rendered.

Mustafa Kuscu
@mcku
will look at the fxml example hopefully some day. wondering about how the dev workflow looks like. scenebuilder comes into the scene too?
杨博 (Yang Bo)
@Atry
I'm not familiar with Android. But the @fxml can mount your bindable data onto any JavaBeans.
Pascal Mengelt
@pme123
@Atry thanks for your feedback and ScalaFiddle
杨博 (Yang Bo)
@Atry
Feel free to take the fiddle to your blog
An updated version is https://scalafiddle.io/sf/o5fWdS3/3
Pascal Mengelt
@pme123
@Atry - thanks - the comments work now;) could you add your input as a comment - would be great! https://pme123.github.io/scala-adapters/development/binding-scala-redux/
Mustafa Kuscu
@mcku
What if a store has an optional substore? See: https://scalafiddle.io/sf/goKYlDa/0
杨博 (Yang Bo)
@Atry
Check your browser's inspector
Mustafa Kuscu
@mcku
isn't it working?
Kahli Burke
@kahliburke
Check the stackoverflow
Pascal Mengelt
@pme123
@kahliburke thanks - that helps - I updated the ScalaFiddle to see the effect.
Leonid Turnaev
@glmars
@Atry do you have any plans to migrate Binding.scala to Dsl.scala and Cats?
Do I understand correctly what it is possible? How hard is it in you opinion (may be PR can help)?
杨博 (Yang Bo)
@Atry

It could be.

But I did not see enough benifits.

Lorenzo Gabriele
@lolgab
There are ways to get the value of an input (like the inputId.value thing ) for dynamic elements (like a Seq of inputs) ? (The id is not fixed at compile time)
If it is a interesting question I can post it on StackOverflow.
Leonid Turnaev
@glmars
@Atry, to have the single FP library (cats) in projects which uses Binding.scala
杨博 (Yang Bo)
@Atry
@lolgab Go ahead
@glmars Binding.scala uses Scalaz because Each requires scalaz.Monad.
However, Dsl.scala does not depend on Cats nor Scalaz.
Binding.scala does not have to depend on Cats if we replace Each to Dsl.scala
Leonid Turnaev
@glmars
So, there is an additional benefit: reduced scalajs output size (Scalaz isn't so small in JS)! In case if some project still doesn't use any FP library.
杨博 (Yang Bo)
@Atry

(Scalaz isn't so small in JS)

The entire Scalaz is big. Fortunately a typical web application with Binding.scala only uses a very small part of Scalaz. You can open your xxxx-fastopt.js to check it. DCE in Scala.js is very useful.

Leonid Turnaev
@glmars

DCE in Scala.js is very useful

I agree, DSE is cool. But on some project I had 2640/2400 kb result of fullOptJS with/without Scalaz.

I suppose that the influence of Scalaz in Binding.scala can be not so much.
(my test project have not used Binding.scala)
Leonid Turnaev
@glmars

@Atry Unfortunately I found a case where application which uses Binding.scala should depend on Scalaz. Please, see example from FAQ:

@dom def renderList(data: List[Binding[String]]) = <ol>{
  import scalaz.std.list._ // Type classes for List
  for (b <- data) yield {
    <li>{b.bind}</li>
  }
}</ol>

Can Dsl.scala remove this dependency (or change to Cats)?

杨博 (Yang Bo)
@Atry
Of course, because Dsl.scala does not support for-comprehension
Dsl.scala itself can be considered as an alternative to for-comprehension
Leonid Turnaev
@glmars
:smile: O! I understand.
Leonid Turnaev
@glmars

@Atry If you're interested, I have repeated the js-framework-benchmark with different versions of Binding.scala.
Here are results for: Chrome 32-bit and for: Chrome 64-bit (sorry, 3 runs only).

Conclusions and questions:

  • your conclusions about Scala 2.12 was confirmed, memory usage is increased by 22-23%:

glmars-v2.12-memory.png

  • but the absolute values are lower than in your results:

atry-v2.12-memory.png

  • I especially pleases by memory consumption on a 32-bit version of Chrome:

32-bit-memory.png

  • one question only: do you have any guesses why the clear rows time increased in Binding.scala v11.0.1?

clear-rows-increase.png

杨博 (Yang Bo)
@Atry
v11 fixed a bug in v10 when removing a node. The fix to ThoughtWorksInc/Binding.scala#56 performs some internal cache invalidation.
Leonid Turnaev
@glmars
Thank you, I also thought about this task :smile:
杨博 (Yang Bo)
@Atry
There could be an optimization in Scala.js scala-js/scala-js#2675, which should improve both code size and computational performance.
The IIFE can be replaced to a normal code block, considering let and const in ECMAScript 2015 code blocks has the same lifecycle as var in IIFEs.
Leonid Turnaev
@glmars
It will be great!
Thanks for the explanation.
杨博 (Yang Bo)
@Atry
You can create a PR to Scala.js if you're interested to optimize the memory usage in Scala 2.12
When compling a closure to JavaScript
  • Scala.js 2.11 create classes
  • Scala.js 2.12 create nested closures in IIFEs, which consums more memory than classes
  • Ideally, it should create plain closures in code blocks (for ECMAScript 2015 target)
Leonid Turnaev
@glmars
I understand an idea, but I'm not sure I am able to do this (because I don't know Scala.js insides very well) :worried:
杨博 (Yang Bo)
@Atry
Never mind
moritz bust
@busti
I recently had a chat with the folks over at scala/contributors and became aware of the fact that xml mode will be faded out with scala 3.
What will happen with binding.scala when that happens?
杨博 (Yang Bo)
@Atry
@Busti Where is the link of the chat
moritz bust
@busti
@Atry Seems like the discussion is still going on at https://gitter.im/scala/contributors
moritz bust
@busti
Does binding.scala use a compiler plugin to parse the contend of @dom methods differently?
Or does it rely on xml literals?
杨博 (Yang Bo)
@Atry
No. Instead, Binding.scala hacks the AST generated by the Scala parser.