我有一些关于使用smartGWT选择哪条路径的基本问题。 我已经玩了一段时间了,到目前为止习惯了小部件的东西。有问题(尤其是浏览器),但谁没有...
我有一个自定义对象retreival机制,带有本地描述符/对象缓存和解析器,触发标准gwt-rpc-async方案。 我正在使用ID和属性而不是数据集交换对象。它们表示为客户端中已有的树/网络。因此,每当我浏览图形/树时,都会加载新对象。或者,如果已经存在于缓存中,则重用(这可以避免实体递归)。
要显示树和列表,我没有使用数据源。我已设法手动创建自己的树对象,在加载某些内容时更新节点/子项,设置属性等。到目前为止,这是动态的。我正在使用 setData()将树设置为 TreeGrid ,并且树中的大多数更改(添加,添加列表,删除等)在视图中立即反映出来。
但问题开始了。我喜欢模型驱动的方法,其中模型(Tree)对数据/对象(更改属性,添加/删除节点)执行某些操作并通知视图(TreeGrid)。只有模型知道什么以及何时处理数据。但是没有/很少有方法,它都在幕后(JavaScript)。我可以编写自己的EventHandler并连接到TreeGrid(后者又有 refreshRow()等方法)。但是由于未知的影响,内存泄漏等原因,我对smartGWT感到不安。
对我来说,似乎视图和模型在smartGWT中过于耦合。我正在使用我的对象图的模型,它可以重复用于不同的种类的视图(TreeGrid,ListGrid,甚至自定义画布),我不知道哪些将显示我的数据。对于列表,我只使用我的根节点的子节点,对于使用整个模型的树。
似乎大多数smartGWT都是为DataSources构建的。为什么没用呢? 对象图是异构的。不可预知的。可能有同类东西的集合,但我再也不是。它与不同的数据库结果集无法比较。客户端已经通过描述符(类)分析了对象字段。此外,我使用 interfaces :可以直接访问对象属性,也可以通过解析接口。这意味着“ITimeObject.time”将被解析为“TelephoneCall.starTime”中的实现属性。我不知道如何创建这样的DataSource ......?
它甚至变得更糟:我有基于角色和权限的对象访问权限。这意味着某个用户可能会看到所有字段,另一个只能看到部分字段。
一旦我创建了解析器和应该为视图构建的模型(动态),我想在代码中的任何地方使用它,而不是为每个调用/视图创建“映射”。一切都是在运行中构建的,在用户界面中我对具体类型,对象等一无所知。描述都来自后端。
确定即可。现在问题:)这里需要澄清很多东西。 我需要提示从这里选择哪条路径。
继续。使用自己的模型/视图。
1a上。我是否能够实现数据源可用的所有功能,如过滤,搜索,编辑/验证?
1b中。如何手动实现模型>查看通知?类似于nodeUpdated(TreeNode节点,boolean childrenToo),没有副作用,例如关闭视图时,设置新模型,销毁画布
1c上。到处都有数据源,表单,编辑器等。有没有办法将自己的模型插入其中?
坚持下去。所有可能与DataSource。
2a上。然后,我如何在客户端中动态创建数据源(使用我现有的模型),这些数据源是自适应的,对检索的内容和要显示的内容敏感。有了视图描述(字段)和“接受的来源”,我可以探索一个对象图。
2B。是否有可能避免“父母ID”计划?这意味着它从一个已知对象开始自上而下。它也可以在列表中多次包含相同的对象,或者是不同父母的孩子。
感谢您的想法:)