Хочу сделать сабж. Окошко выводится, но список пустой. Что я делаю не так?
Метод onPreparePaymentsList не вызывается, кстати. Ошибок в консоли нет.
define("UsrFlip1Page", ["ServiceHelper", "jQuery", "css!UsrFlip1PageCSS"], function(ServiceHelper, jQuery) { return { entitySchemaName: "UsrFlip", attributes: { "PaymentVList": { dataValueType: Terrasoft.DataValueType.COLLECTION, type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN, caption: "Платежи", name: "PaymentVList", isCollection: true } }, details: /**SCHEMA_DETAILS*/{ }, diff: /**SCHEMA_DIFF*/[ ]/**SCHEMA_DIFF*/, methods: { init: function() { this.callParent(arguments); this.set("PaymentVList", this.Ext.create(Terrasoft.Collection)); }, onEntityInitialized: function() { this.callParent(arguments); this.set("ActivePayments", null); var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", { rootSchemaName: "UsrPayment" }); esq.addColumn("Id"); esq.addColumn("UsrBillNumber"); esq.addColumn("UsrPpNumber"); esq.addColumn("UsrSum"); esq.addColumn("UsrType.Name"); esq.filters.add("filterAuto", this.Terrasoft.createColumnFilterWithParameter( this.Terrasoft.ComparisonType.EQUAL, "UsrAuto", this.get("UsrAutoId").value)); esq.filters.add("filterStatus", this.Terrasoft.createColumnInFilterWithParameters("UsrStatus.Name", ["Активный", "Не подтвержден"])); esq.getEntityCollection(function(result) { if (result.success) { var PaymentItems = {}; result.collection.each(function(item) { PaymentItems[item.get("Id")] = { "value": item.get("Id"), "displayValue": item.get("UsrBillNumber") + " / " + item.get("UsrPpNumber") + " / " + item.get("UsrSum") + " / " + item.get("UsrType.Name") }; }, this); var list = this.get("PaymentVList"); list.loadAll(PaymentItems); } }, this); }, getActions: function() { var actionMenuItems = this.callParent(arguments); actionMenuItems.addItem(this.getActionsMenuItem( { "Caption": "Уточнение назначения платежа", "Tag": "runPaymentCorrection" } )); return actionMenuItems; }, onPreparePaymentsList: function() { debugger; }, runPaymentCorrection: function() { if (this.get("PaymentVList").getCount() === 0) { Terrasoft.showInformation("По данному авто нет активной оплаты!"); return; } debugger; Terrasoft.showInputBox("Выберите п/п для уточнения", function(button) { Terrasoft.showInformation(button); }, ["ok", "cancel"], this, { name : { caption: "Платежи", dataValueType: Terrasoft.DataValueType.ENUM, className: "Terrasoft.ComboBoxEdit", list: { bindTo: "PaymentVList" }, prepareList: { bindTo: "onPreparePaymentsList" }, isRequired: true } }, { defaultButton: 0 }); } }, rules: {} }; });
Нравится
Алексей, вот кусок кода, который вы можете использовать для вашей задачи. Были рады помочь.
define("ActivityPageV2", [], function() { return { entitySchemaName: "Activity", rules: {}, messages: {}, details: /*SCHEMA_DETAILS/{}/*SCHEMA_DETAILS/, attributes: {}, methods: { getActions: function() { var actionMenuItems = this.callParent(arguments); actionMenuItems.addItem(this.getActionsMenuItem( { "Caption": "Тестовое действие", "Click": {"bindTo": "statusInputBox"} } )); return actionMenuItems; }, statusInputBox: function() { var caption = "Выбор статуса"; this.set("StatusList", new Terrasoft.Collection()); var controls = { "ActivityStatus": { dataValueType: Terrasoft.DataValueType.ENUM, isRequired: true, caption: "Статус", value: { bindTo: "ActivityStatus" } , customConfig: { list: { bindTo: "StatusList" } , prepareList: { bindTo: "onPrepareStatusList" } } } }; var statusInputBoxHandler = this.statusInputBoxHandler.bind(this); Terrasoft.utils.inputBox(caption, statusInputBoxHandler, [Terrasoft.MessageBoxButtons.OK, Terrasoft.MessageBoxButtons.CANCEL], this, controls); Terrasoft.each(Terrasoft.MessageBox.controlArray, function(item) { item.control.bind(this); } , this); }, onPrepareStatusList: function() { var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", { rootSchemaName: "ActivityStatus" } ); esq.addColumn("Id"); esq.addColumn("Name"); esq.filters.add("finish", Terrasoft.createColumnFilterWithParameter( Terrasoft.ComparisonType.EQUAL, "Finish", true)); esq.getEntityCollection(function(result) { if (result.success) { var items = {}; result.collection.each(function(item) { items[item.get("Id")] = { "value": item.get("Id"), "displayValue": item.get("Name") } ; }, this); var list = this.get("StatusList"); list.loadAll(items); } }, this); }, statusInputBoxHandler: function(tag, data) { if (Terrasoft.MessageBoxButtons.OK.returnCode === tag) { if (Ext.isEmpty(data.ActivityStatus.value)) { this.showInformationDialog("Нужно что-то выбрать", function() { this.statusInputBox(); } ); } else { this.showInformationDialog(data.ActivityStatus.value.displayValue); } } } }, diff: /*SCHEMA_DIFF/[]/*SCHEMA_DIFF/ }; });
Маялся уже. Всю голову сломал. Лист не готовится, от вручную указанного кол-ва записей в листе ничего не зависит, "prepareList" не вызывается... Через час плюнул, сделал собственный модуль)
Делал что-то подобное, но через messageBox. Метод в prepareList вызывался (при попытке выбора), как и метод в change.
Тёскин Дмитрий Валерьевич,
а есть пример кода? мне кажется, я уже всё перепробовал
Алексей-Карягин,
Примера кода, к сожалению, не осталось. Попробовал вчера на досуге ваш код поковырять - действительно не работает. Возможно я использовал какой-то кастомизированный messageBox. Единственное, что заметил - у меня ветки объекта prepareList и change были внутри customConfig.
Алексей, вот кусок кода, который вы можете использовать для вашей задачи. Были рады помочь.
define("ActivityPageV2", [], function() { return { entitySchemaName: "Activity", rules: {}, messages: {}, details: /*SCHEMA_DETAILS/{}/*SCHEMA_DETAILS/, attributes: {}, methods: { getActions: function() { var actionMenuItems = this.callParent(arguments); actionMenuItems.addItem(this.getActionsMenuItem( { "Caption": "Тестовое действие", "Click": {"bindTo": "statusInputBox"} } )); return actionMenuItems; }, statusInputBox: function() { var caption = "Выбор статуса"; this.set("StatusList", new Terrasoft.Collection()); var controls = { "ActivityStatus": { dataValueType: Terrasoft.DataValueType.ENUM, isRequired: true, caption: "Статус", value: { bindTo: "ActivityStatus" } , customConfig: { list: { bindTo: "StatusList" } , prepareList: { bindTo: "onPrepareStatusList" } } } }; var statusInputBoxHandler = this.statusInputBoxHandler.bind(this); Terrasoft.utils.inputBox(caption, statusInputBoxHandler, [Terrasoft.MessageBoxButtons.OK, Terrasoft.MessageBoxButtons.CANCEL], this, controls); Terrasoft.each(Terrasoft.MessageBox.controlArray, function(item) { item.control.bind(this); } , this); }, onPrepareStatusList: function() { var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", { rootSchemaName: "ActivityStatus" } ); esq.addColumn("Id"); esq.addColumn("Name"); esq.filters.add("finish", Terrasoft.createColumnFilterWithParameter( Terrasoft.ComparisonType.EQUAL, "Finish", true)); esq.getEntityCollection(function(result) { if (result.success) { var items = {}; result.collection.each(function(item) { items[item.get("Id")] = { "value": item.get("Id"), "displayValue": item.get("Name") } ; }, this); var list = this.get("StatusList"); list.loadAll(items); } }, this); }, statusInputBoxHandler: function(tag, data) { if (Terrasoft.MessageBoxButtons.OK.returnCode === tag) { if (Ext.isEmpty(data.ActivityStatus.value)) { this.showInformationDialog("Нужно что-то выбрать", function() { this.statusInputBox(); } ); } else { this.showInformationDialog(data.ActivityStatus.value.displayValue); } } } }, diff: /*SCHEMA_DIFF/[]/*SCHEMA_DIFF/ }; });