Использование canvasItem для включения listGrid связанных данных в dynamicForm - PullRequest
1 голос
/ 09 февраля 2012

Мне нужна форма, которая включает в себя список связанных доступных параметров, которые можно выбрать с помощью флажка.Количество параметров может быть очень большим, каждая запись формы будет иметь свой собственный набор параметров.Выбранные параметры могут быть изменены при каждой отправке.
Я использую источники данных JSON с php-сервером, поэтому я использую только клиентскую часть SmartClient.
Я использовал примеры, доступные для создания моего canvasItem, но у меня есть двапроблемы:
1. Когда я извлекаю данные из источника данных формы, источник данных canvasItem не выполняет выборку.
2. Изменения в элементе canvasItem не включаются в отправку формы.
Вот мой тестовый код:
Код источника данных.
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.

1 Ответ

1 голос
/ 01 марта 2012

Q1.При извлечении данных из источника данных формы источник данных canvasItem не выполняет выборку.

Если вы используете серверный SmartClient, вы объединяете два источника данных, поэтому при обновлении один обновляет оба, в противном случае вам нужно выполнить выборку вручную.

Q2. Изменения в canvasItem не включены в форму отправки.

Замените функции, которые в настоящее время находятся в isc.GridEditorItem.addProperties, следующим текстом:

selectionUpdateTest : function (iRowId,sStoreArray) {
    var outArray = new Array();
    var bFound = false;
    if (sStoreArray ==undefined) { bFound = false;}
    else {
        for (var i = 0;i <sStoreArray.length;i++) {
            if (sStoreArray[i] == iRowId) 
                bFound = true;
            else 
                outArray[outArray.length] = sStoreArray[i];
        }
    }
    if (!bFound)
        outArray[outArray.length] = iRowId;
    return outArray;
},
selectionUpdated : function (record) {
    var item = this.canvasItem;
    if (record == null) 
        item.storeValue(null);
    else 
        item.storeValue(this.selectionUpdateTest(record.RowId,item.getValue()));
},
...