我一直试图找出允许JavaFX TableView(或任何其他JavaFX事物)表示一些Clojure数据的方法,并允许用户通过GUI操作数据.
对于这个讨论,让我们假设我有一个列表/矢量的地图,即类似的东西
[{:col1 "happy1" :col2 "sad1"} {:col1 "happy2" :col2 "sad2"}]
,我希望它显示在图形表中,如下所示:
mykey1 mykey2
------------------
happy1 sad1
happy2 sad2
Run Code Online (Sandbox Code Playgroud)
非常直截了当.这在世界历史上已经完成了无数次.
问题是TableView坚持采用ObservableList等,这本身就是一个可变的东西,就像JavaFX中的所有Observable一样.这非常适合保持表格更新,并且在可变模型中,它也非常适合允许用户通过GUI直接操作数据.我不是专家,但在这种情况下,似乎JavaFX希望GUI对象实际包含真实数据.这对我来说似乎很有趣(不是哈哈).通过某些API或接口维护我自己的模型并在GUI和模型之间进行通信也意味着我将数据保存在两个地方:在我自己的模型中,在GUI中.这是正确的做事方式吗?也许这是可以的,因为GUI只显示总数据的一小部分,并且它允许我的模型数据只是普通模型数据,而不是某些Java派生类型的实例.
因此,当尝试将GUI放在无状态/不可变模型上时,这会导致以下三个一般性问题:
如果GUI必然允许您更改内容,那么下面的模型如何才能真正不变?我正在考虑某种设计工具,编辑器等,其中用户明确地改变了一些东西.例如,LightTable是一个编辑器,但故事是它基于不可变数据.怎么会这样?我对此次讨论并不感兴趣.
假设在某种程度上存在至少一个Atom
或其他Clojure可变类型(ref/var/agent/etc)(无论是Atom
包含整个内存设计数据库的单个,还是设计数据库是否是可变的不可变列表Atoms
) ,哪种[MVP,MCP,MVVM等]模型最适合这种类型的创作?
JavaFX已经使用Observable接口(http://docs.oracle.com/javafx/2/api/javafx/beans/Observable.html)的 每个可以想象的变体散布了类层次结构Observable[whatever]Value
,其中包括例如ObservableMap
和ObservableMapValue
,以及然后几十个实施课程,如... IntegerProperty
和SimpleIntegerProperty
geez!WTF?假设我必须创建一些Clojure对象(defrecord
等等)并Observable
在我的大多数不可变对象上实现一些接口方法,我可以坚持Observable
,或者我必须将每一个实现到叶节点,即ObservableIntegerValue
等等?
什么是正确的高级方法?维护一个顶级原子,每次用户更改值时都会替换它?保持一千个低级原子?让我的值存在于JavaFX Observables中,忘记Clojure数据结构?使用一些reify/proxy/gen-class在Clojure中实现我自己的一组Observable,但是将它们实现为每次更改时都被替换的不可变项?Clojure的add-watch
功能是否需要或存在?我非常希望我的数据只是Clojure中的普通数据,而不是"类型"或任何接口的实现.整数应该是整数等.
谢谢
如何在Light Table 0.6.0中激活vim模式.文档在编辑器模式中说只是键入"vim"并且它将自动完成,但现在它没有?我应该为用户行为添加什么?
{:+ {
;; The app tag is kind of like global scope. You assign behaviors that affect
;; all of Light Table here
:app [(:lt.objs.style/set-skin "dark")]
;; The editor tag is applied to all editors
:editor [:lt.objs.editor/no-wrap
(:lt.objs.style/set-theme "default")]
;; Here we can add behaviors to just clojure editors
:editor.clojure [(:lt.objs.langs.clj/print-length 1000)]}
;; You can use the subtract key to remove behavior that may get added by
;; another diff
:- {:app []}}
Run Code Online (Sandbox Code Playgroud) 最近我对以下伪造的python代码的第2行发生了什么感到好奇:
def my_fun(foo,bar):
foo
return foo + bar
Run Code Online (Sandbox Code Playgroud)
我之所以感兴趣的原因是我正在尝试使用Light Table并尝试将手表放在"foo"上.它似乎导致python解释器挂起.
我是否认为这条线完全没有效果并且不会导致任何错误?有人可以解释一下翻译在这里做了什么吗?
LightTable中的文档似乎很少.我想在LightTable中创建一个非常简单的ClojureScript Web应用程序作为构建的起点.我在Clojure中的Instarepl工作正常,然后我创建了一个名为dummy.cljs的新文件,其中包含以下内容:
(ns dummy)
(js/alert "Hello lighttable")
Run Code Online (Sandbox Code Playgroud)
我该怎么办呢?
我现在已经想到了这一点,我将发布一个关于如何使用它的视频,因为它非常直观.
这是视频:
如何在LightTable IDE中格式化代码?我在谈论Eclipse中的Ctrl + Shift + F等价物.
有没有人有LightTable的备忘单,甚至更好的paredit插件,似乎我的google-fu不能找到一个?
我很抱歉我是Clojure的新手.我发现到目前为止我已经能够消化的Clojure世界的工具或教程并不多,所以我已经下载了Light Table(http://www.lighttable.com/)喜欢它应该让它更容易.我在Windows 7 64位上,基本的Light Table UI似乎正在运行.
为了尝试进一步尝试Light Table/Clojure,我还下载了Clojure绘图库Quil(https://github.com/quil/quil),但在指示Light Table连接到\ quil-master\project.clj之后然后打开并执行来自\ quil-master\examples(例如automata.clj或graphics.clj)的各种文件,Light Table产生我认为是旋转的蓝色"思考"图标,该图标被卡住或最终以"nil"结尾或"java.lang.Math".
只有"example2.clj"似乎可以工作(尽管并非总是如此),因为它(通常)会弹出一个带有变色钻石的窗口.我需要做些什么才能使这些其他Quil示例在Light Table中运行?
(另一方面,我也下载了Mire(Github上的另一个Clojure项目),但它也不会与Light Table一起运行.)
我是Lighttable IDE的新手.
任何人都知道如何设置workspace
和Windows字体大小.
我可以改变编辑器字体大小.但不知道如何设置font-size
其他元素.或更改所有IDE字体的font-size全局.
如何在Light Table IDE中使用virtualenv来评估Python ?
我在virtualenvs下运行我的所有项目,并且所有virtualenvs都位于子文件夹中/.virtualenvs/
(非常标准的练习)
我看到LightTable支持每个工作区设置的行为,那么有没有办法设置一个将工作区绑定到特定virtualenv路径的行为?
当我在LightTable中输入(clojure-version)到我的repl时,我得到"1.5.1"
输出.有没有办法升级到1.6.0?
我假设它正在从Leiningen(我的机器上的2.3.4)中绘制Clojure版本,其中装有1.5.1开箱即用.如何确保Leiningen和LightTable都使用最新版本的Clojure?我google了,找不到任何明确的答案.
我确实找到了这个问题,但它没有具体解决我的问题.有没有像我可以调用的"lein update"命令自动化这个过程,LightTable会识别和接收哪个,或者这是一厢情愿的想法?