
Easy-to-use observable properties and event handlers with listener management, property mapping and computed values, observable list transformations (map/filter/sort), plus reactive math-style property operations.
An easy to use kotlin library for observable properties.
To use this library simply add this to your build.gradle
repositories {
jcenter()
}
dependencies {
implementation "io.github.pixix4:KObserve-jvm:$version"
}To use it with javascript or common modules replace KObserve-jvm with KObserve-js or KObserve-metadata respectively.
When you use this library in common modules you need to add the platform specific dependency to each depending module.
An easier method is to enable gradle_metadata an experimental feature for gradle 5. This will automatically determine the target platform and include the necessary dependency.
Add this to your settings.gradle
enableFeaturePreview('GRADLE_METADATA')And update your build.gradle
repositories {
jcenter()
}
dependencies {
implementation "io.github.pixix4:KObserve:$version"
}val onRandomNumber = EventHandler<Int>()
onRandomNumber { number -> Int
println("The random number is $number!")
}
onRandomNumber.emit(5)For advanced usage you can obtain a event listener reference or combine event handlers.
val addedReference = onRandomNumber.reference {
println("This listener can be removed easily.")
}
addedReference.remove()
val onFoo = EventHandler<Int>()
val onBar = EventHandler<Double>()
(onRandomNumber + onFoo) { number: Int ->
println("The int is $number!")
}
onFoo.and<Number>(onFoo) { number: Number ->
println("The number is $number!")
}Create a simple object property with the property(T) function:
val numberProperty: ObjectProperty<Int> = property(0)
var number: Int by numberProperty
numberProperty.onChange {
println("Number has been changed!")
}
number = 2or use the observe() extension function:
val numberProperty: ObjectProperty<Int> = 0.observe()You can map each property to observe a member property:
class Person(
var name: String
)
val personProperty = Person("John Doe").observe()
val nameProperty = personProperty.map(Person::name)
var name: String by nameProperyor a computed value:
val nameLengthProperty = nameProperty.map { it.length }val personList = observableListOf<Person>()
val mappedList = personList.mapObservable {
it.name
}
val filteredList = personList.filterObservable {
it.name.length > 5
}
val sortedList = personList.sortObservable(Comparator { p1, p2 ->
p1.name.compareTo(p2.name)
})val number1 = property(5)
val number2 = property(10)
val calcProperty = (number1 + number2) * number1An easy to use kotlin library for observable properties.
To use this library simply add this to your build.gradle
repositories {
jcenter()
}
dependencies {
implementation "io.github.pixix4:KObserve-jvm:$version"
}To use it with javascript or common modules replace KObserve-jvm with KObserve-js or KObserve-metadata respectively.
When you use this library in common modules you need to add the platform specific dependency to each depending module.
An easier method is to enable gradle_metadata an experimental feature for gradle 5. This will automatically determine the target platform and include the necessary dependency.
Add this to your settings.gradle
enableFeaturePreview('GRADLE_METADATA')And update your build.gradle
repositories {
jcenter()
}
dependencies {
implementation "io.github.pixix4:KObserve:$version"
}val onRandomNumber = EventHandler<Int>()
onRandomNumber { number -> Int
println("The random number is $number!")
}
onRandomNumber.emit(5)For advanced usage you can obtain a event listener reference or combine event handlers.
val addedReference = onRandomNumber.reference {
println("This listener can be removed easily.")
}
addedReference.remove()
val onFoo = EventHandler<Int>()
val onBar = EventHandler<Double>()
(onRandomNumber + onFoo) { number: Int ->
println("The int is $number!")
}
onFoo.and<Number>(onFoo) { number: Number ->
println("The number is $number!")
}Create a simple object property with the property(T) function:
val numberProperty: ObjectProperty<Int> = property(0)
var number: Int by numberProperty
numberProperty.onChange {
println("Number has been changed!")
}
number = 2or use the observe() extension function:
val numberProperty: ObjectProperty<Int> = 0.observe()You can map each property to observe a member property:
class Person(
var name: String
)
val personProperty = Person("John Doe").observe()
val nameProperty = personProperty.map(Person::name)
var name: String by nameProperyor a computed value:
val nameLengthProperty = nameProperty.map { it.length }val personList = observableListOf<Person>()
val mappedList = personList.mapObservable {
it.name
}
val filteredList = personList.filterObservable {
it.name.length > 5
}
val sortedList = personList.sortObservable(Comparator { p1, p2 ->
p1.name.compareTo(p2.name)
})val number1 = property(5)
val number2 = property(10)
val calcProperty = (number1 + number2) * number1