问题标签 [smartclient]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
eclipse - 使用 2 个模块的 JUnit 测试 gwt Web 应用程序
我目前每晚使用 gwt 2.3 和 smartgwtpower 2.5 并在 Linux 上使用 Eclipse。我的 Web 应用程序使用公共代码,内部开发,并打包到一个名为 commonsmartgwt.jar 的 jar 中。在这个 jar 中是入口点类,并且有自己的 gwt.xml 文件。在我的网络应用程序的 gwt.xml 文件中,我从入口点类继承
我使用入口点 common.code.client.Common 作为我的网络应用程序的入口点。我的网络应用程序中的所有类都扩展了公共代码中的类。编译和运行工作正常,但是当我尝试使用 eclipse 方法 Run As > GWT Junit Test 运行测试时,出现以下错误。无法在您的类路径中找到 common/code/Common.gwt.xml;可能是拼写错误,或者您忘记包含源的类路径条目。如果我在 classes 下创建文件夹 common/code/ 并从 commonsmartgwt.jar 中提取 .gwt.xml 文件并将其放在该目录中,我会得到一个不同的错误。
有没有办法对这个应用程序进行单元测试。如果我的情况不清楚,请告诉我。如果我将入口点从公共代码移动到我的 Web 应用程序会怎样?我尝试按照此处的说明进行操作:[错误解决][1]
但这没有用。
javascript - SmartClient:PUT 数据复制
我正在使用 SmartClient 8.1 并使用 XML 数据源进行 GET 和 PUT 操作。
以下是我获取的数据示例。
当我更新值并提交表单时,SmartClient 将以下数据作为 PUT 有效负载发送。
在 PUT 有效负载中,更新的值在没有组元素(扁平化)的情况下与组中的旧值一起发送。此处不需要/不需要这些分组的旧值。
谁能告诉它为什么会发生以及我应该怎么做才能从 PUT 有效负载中删除这些值?
这与 DynamicForm.submit() 与 DynamicForm.saveData() 有关吗?
我在 SmartClient 论坛上问过这个问题,但仍然没有答案。我希望有人可以在这里帮助我。
java - GWT MVP 和 SmartGWT 兼容性
在我的新项目中,客户要求使用 GWT/SmartGWT 来开发表示层。(注意:屏幕不是很复杂)我知道 MVP 模式(从未使用过),但我需要决定我应该使用哪种风格的 MVP 模式,它符合以下标准。
- 我应该能够将 SmartGWT 组件与 MVP 框架无缝集成/使用。
- 如果框架为我提供了支持在移动或 iPad 类设备上显示 UI 的灵活性,那就太好了。
我之前注意到,当 GWT 和 SmartGWT 的组件一起使用时,行为是不一致的。在这里纠正我是真的吗?
对此的任何指导将不胜感激。
谢谢!!巴韦什
wpf - 在 WPF 智能客户端应用程序中使用 WCF DTO 时理解使用 MVVM 的问题
在该领域几乎没有经验,我正在编写一个 WPF 智能客户端应用程序,使用 MVVM 与 WCF 后端通信,并且我真的很难从所有信息中做出正确的决定。这让我想到了一系列问题,我希望在这方面更有经验的人可以在这里解决这些问题。
例如,其中一个屏幕将允许输入订单并向订单添加订单行。
什么用作模型?
在 WCF 服务上,我有以下简化的 DTO:
以及具有以下方法的 WCF 服务:
然后,在我的 WPF 智能客户端中,我引用了 DTO,但显然它没有实现INotifyPropertyChanged
,因为它纯粹是为了传输。
问题
推荐的方法是将这些 DTO 转换为INotifyPropertyChanged
使用 Automapper 或类似方法实现的模型吗?还是应该直接在 ViewModel 中将 DTO 用作模型?
视图模型之间的通信
目前,我有一个带有 2 个选项卡(Order
和OrderLines
)的订单视图,其中包含 ViewModelsOrderViewModel
和OrderLineViewModel
. 在订单选项卡上,我有一个ComboBox
包含客户 ID 和名称的内容。当我在 上选择客户时OrderView
,我需要告知OrderLineView
客户已被选择,以便ComboBox
仅显示属于该客户的产品。
问题
在这种情况下如何与OrderViewModel
通信OrderLineViewModel
?
添加订单行并应用逻辑/业务规则
由于服务器级应用程序将被多个客户端(例如 PC、移动设备)使用。我想确保在服务器级应用程序中应用所有业务规则。例如,添加订单行时。如果是某种产品类型,则只有在客户具有某种认证的情况下才能添加。
然而,我所读到的关于 MVVM 的所有内容都表明该模型是适用于业务规则和行为的——所有这些示例都在客户端实现了该模型。理想情况下,我不想在客户端和服务器上重复相同的检查,所以我想知道如何确保不会发生这种情况。
问题
您是否允许用户添加无效行,将请求发送到服务器,让服务器应用相关规则并返回响应?或者在将请求发送到服务器之前,您是否以某种方式在智能客户端应用程序中应用逻辑?
我真的想在我在这里概述的所有领域都变得更好,我提前感谢您的任何回复。
谢谢
亚历克斯
编辑: 感谢大家的贡献,因为它帮助我在最佳前进方向方面变得更加清晰。所有的答案都很好,但我决定接受 Uri 的答案,因为它最符合我现阶段的想法。但是,我仍然不确定处理从 DTO 的 Id 到 ItemsSource 中的 SelectedItem 的转换的最佳方法,ItemsSource 是 ViewModel 的列表。我可以看到转换器可能会工作,但我会尝试寻找另一种解决方案。谢谢亚历克斯
smartclient - 使用 SmartClient LGPL 版本获取数据
我想使用 LGPL 版本的智能客户端连接到我自己的服务器。我希望 SmartClient 发送一个获取请求(包含操作类型、范围等)——我会处理其余的。但我不能强迫 SmartClient 这样做。我所能做的就是强制它发送一个简单的 GET 请求。我应该添加什么?
我的代码:
java - 如何在 SmartGWT 中的 DynamicForm 的 StaticTextItem 组件上应用样式?
我想在 SmartGWT 的 DynamicForm 项中的 StaticTextItem 上应用样式。
我没有为这个组件找到任何像 setStyleName 这样的方法。
有没有其他方法可以在 StaticTextItem 上应用样式?
我还注意到 ToolStrip 组件只能添加表单项,所以在这里我被卡住了如何应用样式,特别是在 StaticTextItem 上。
我的目标只是在 ToolStrip 上添加带有样式的标签。
对此表示赞赏的任何替代方法!!!
谢谢!!!
datasource - 使用 canvasItem 在 dynamicForm 中包含相关数据的 listGrid
我需要一个包含可以通过复选框选择的相关可用选项列表的表单。选项的数量可能非常大,每个表单记录都有自己的一组选项。选择的选项可能会在每次提交时更改。
我正在使用带有 php 服务器的 JSON 数据源,所以我只使用 SmartClient 客户端。
我已经使用了可用的示例来创建我的 canvasItem,但我有两个问题:
1. 当我在表单 dataSource 上 fetchData 时,canvasItem dataSource 不执行提取。
2.canvasItem的变化不包含在表单提交中。
这是我的测试代码:
dataSource Code。
isc.DataSource.create({
ID:"PointDetlData",dataFormat:"json",idField: "NodeId",
fields:[{name:"NodeId",primaryKey:true,type:"integer",title:"Node Id"},
{name:"RowId",title:"Row",canEdit:"false"},
{name:"Code",title:"Product",canEdit:"false"},
{name:"Name",title:"Details",canEdit:"false"},
{name:"Sel",type:"boolean",title:"Assign"}],
operationBindings:[{operationType:"fetch", dataURL:"dsdet.json"},
{operationType:"update",dataURL:"updateTestDetail.php"}]
});
isc.DataSource.create({
ID:"PointData",dataFormat:"json",idField: "NodeId",
fields:[{name:"NodeId",primaryKey:true,type:"integer",title:"Node Id"},
{name:"PointId",type:"integer",title:"PointId"},
{name:"CompanyNodeID",title:"Company"},
{name:"Level",title:"Node Type"},
{name:"Name",title:"Name"},
{name:"items[]",title:"Order Items",multiple:"true",type:"PointDetlData"}],
operationBindings:[{operationType:"fetch", dataURL:"ds.json"},
{operationType:"update",dataURL:"updateTest.php"}]
});
canvasItem 定义
isc.ClassFactory.defineClass("GridEditorItem", "CanvasItem");
isc.GridEditorItem.addProperties({
height:"*", width:"*",
rowSpan:"*", endRow:true, startRow:true,
shouldSaveValue:true,
createCanvas : function () {
return isc.ListGrid.create({
autoDraw:false,
ID:"exampleFormGrid",
width:this.width, height:this.height,
leaveScrollbarGaps:false,
dataSource:this.gridDataSource,
fields:this.gridFields,canEdit:true,modalEditing:true,
saveLocally:true,autoSaveEdits:false,
cellChanged : function () {
this.canvasItem.saveValue(this.data);
if (this.canvasItem.gridSortField != null)
{this.sort(this.canvasItem.gridSortField);}
},
dataArrived : function () {this.canvasItem.showValue(null, this.canvasItem.getValue());},
selectionUpdated : function (record) {
var item = this.canvasItem;
if (record == null) item.storeValue(null);
else item.storeValue(record[item.name]);
},
refreshData : function (filter) {if (typeOf(filter) != null) this.fetchData(filter);}
});
},
showValue : function (displayValue, dataValue) {
if (this.canvas == null) return;
var record = this.canvas.data.find(this.name, dataValue);
if (record) this.canvas.selection.selectSingle(record)
else this.canvas.selection.deselectAll();
}
});
dynamicForm 的代码。
isc.DynamicForm.create({
ID: "exampleForm", autoDraw:true,
width: 700, height: 350, position:"relative",
dataSource:"PointData",
fields: [{name:"NodeId" },
{name:"PointId" },
{name:"items[]",
width:350,
colSpan:2,showTitle:false,
editorType:"GridEditorItem",
gridDataSource:"PointDetlData",
gridFields:[{name:"RowId"},{name:"Code"},{name:"Name"},{name:"Sel"}],
gridSortField:"RowId"},
{name:"Level"},{name:"Name"},
{editorType:"SubmitItem", title:"Save"}]
});
exampleForm.fetchData({NodeId:4});
我正在使用 SmartClient 8.1/LGPL 部署(建于 2011-08-02)和 Firefox 8.0 浏览器。
django - 使用 Django 和 SmartClient 创建 RIA
我正在研究使用 Django 或 Rails 以及 SmartClient (smartclient.com) 或 ExtJS 的组合来实现涉及大量基于网格的视图(想想 Excel)的 RIA 的可能性。
有没有人成功地做到过,有人可以提供一些书面或视听材料的链接吗?我正在寻找专门针对 SmartClient 的教程等?据我所知,关于 ExtJS 的材料很多,关于 SmartClient 的材料很少。
现在我倾向于 SmartClient 和 Django。SmartClient,因为乍一看它似乎比 ExtJS 更完整(尽管文档较少)。
我已通读 SmartClient“入门”文档,但我正在寻找一些更深入的材料。
编辑:原则上,我希望有人投票支持关闭此项目。如果得到有用的答案,我认为这是一个有用的问题。我不是要求讨论 ExtJS 与 SmartClient 或 Rails 与 Django。只是寻找指向文档的指针。
smartgwt - SmartGwt - SmartGwt 中类似 Excel 的基于单元格的焦点
我正在尝试在 SmartGwt 中实现类似 MS-Excel 的功能,我可以使用键盘在 ListGrid 中的各个单元格中导航并单独编辑单元格。
目前只能在行级别导航网格,所有可编辑单元格一起进入编辑模式。
我们有一个显示股票市场数据的网格,其中包含价格、代码等字段。最后一个字段是一个按钮,用户希望使用箭头键导航到该按钮并按 Enter 键执行买入/卖出订单。
感谢您的帮助