1

我有一些关于使用 smartGWT 选择哪条路径的基本问题。我已经玩了一段时间了,到目前为止已经习惯了小部件的东西。有问题(尤其是浏览器),但谁没有……

我有一个自定义对象检索机制,具有触发标准 gwt-rpc-async 方案的本地描述符/对象缓存和解析器。我正在用 ID 和属性而不是数据集交换对象。它们表示为客户端中已经存在的树/网络。因此,每当我探索图形/树时,都会加载新对象。或者,如果已经存在于缓存中,则重用(这避免了实体递归)。

为了显示树和列表,我没有使用数据源。我已经设法手动创建自己的对象,在加载某些内容时更新节点/子节点,设置属性等。到目前为止,这是动态的。我正在使用setData()将Tree设置为TreeGrid,并且 Tree 中的大多数更改(添加、添加列表、删除等)都会立即反映在视图中。

但问题从这里开始。我喜欢模型驱动的方法,模型(树)对数据/对象做一些事情(更改属性,添加/删除节点)并通知视图(TreeGrid)。只有模型知道如何处理数据以及何时处理数据。但是没有/很少包含方法,这一切都在引擎盖下(JavaScript)。我可以编写自己的 EventHandler 并连接到 TreeGrid(它又具有refreshRow()等方法)。但由于未知的影响、内存泄漏等,我对使用 smartGWT 执行此操作感到不安。

在我看来,smartGWT 中的视图和模型似乎过于耦合。我正在为我的对象图使用一个模型,该模型可用于不同类型的视图(TreeGrid、ListGrid,甚至自定义画布),但我不知道哪个会显示我的数据。对于列表,我只使用根节点的子节点,对于树,我使用整个模型。

似乎大部分 smartGWT 真的是为 DataSources 构建的。为什么不使用它? 对象图是异构的。不可预料的。可能有同质的东西的集合,但我又不是。它无法与不同的数据库结果集相提并论。对象字段已在客户端通过其描述符(类)进行分析。此外,我使用接口:可以直接访问对象属性,也可以通过解析接口来访问。这意味着“ITimeObject.time”将被解析为“TelephoneCall.starTime”中的实现属性。我不知道如何创建这样的数据源...?

更糟的是:我拥有基于角色和权限的对象访问权限。这意味着某个用户可能会看到所有字段,而另一个用户只能看到部分字段。

一旦我创建了应该为视图(动态)构建的解析器和模型,我想在代码中的任何地方使用它,而不是为每个调用/视图创建“映射”。一切都是即时构建的,在用户界面中,我对具体类型、对象等一无所知。描述都来自后端。

好的。现在的问题:) 只需要在这里澄清很多东西。我需要提示从这里选择哪条路径。

  1. 继续。使用自己的模型/视图。

    1a。我能否实现数据源提供的所有功能,如过滤、搜索、编辑/验证?

    1b。如何手动实现模型->视图通知?像 nodeUpdated(TreeNode node, boolean childrenToo) 这样没有副作用的东西,例如关闭视图时,设置新模型,破坏画布

    1c。到处都有数据源,表单,编辑器等。有办法将我自己的模型插入其中吗?

  2. 不挂断。使用 DataSource 一切皆有可能。

    2a. 然后,我如何在客户端中动态创建数据源(使用我现有的模型),这些数据源对检索到的内容和打算显示的内容具有自适应性和敏感性。拥有视图描述(字段)和“接受的来源”,我可以探索对象图。

    2b。是否可以避免“父 ID”方案?这意味着它从一个已知对象开始自上而下。它还可以在列表中多次包含相同的对象,或者是不同父母的孩子。


很抱歉冗长的描述。我没有具体的代码问题要发布 atm,因为我还没有编辑等,只是显示。我想分析我是否应该从这里继续,因为我遇到了 Tree/TreeGrid 通信的限制。

谢谢你的想法:)

4

0 回答 0