Хочу сделать сабж. Окошко выводится, но список пустой. Что я делаю не так?
Метод 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/
};
});