Вот как в функции вернуть не undefined ? :)
proc: function(Id)
{
return getCallCountForButtonCaption(Id);
Вот как сделать чтобы возвращать не undefined, а результат асинхронного вызова который
аяксом вернется из getCallCountForButtonCaption т. е. синхронизировать асинхронный вызов
}
getCallCountForButtonCaption: function (candId) {
this.logStep('getCallCountForButtonCaption started...');
// Создаем экземпляр класса Terrasoft.EntitySchemaQuery с корневой схемой [Contact].
var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {
rootSchemaName: "AACandCall"
});
// Добавляем колонку с именем основного контакта контрагента, который относится к данному контакту.
esq.addColumn("CallCount");
esq.filters.add("filterByIdCand",
esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,
"IdCand", candId));
esq.getEntityCollection(function (response) {
this.logStep('ForButtonCaption callCount request has started!');
if (response.success) {
this.logStep('ForButtonCaption callCount response.success is true');
if (response.collection.getCount() > 0) {
var firstItem = response.collection.getByIndex(0);
var callCount = firstItem.values.CallCount;
//this.setButtonCaption(callCount);
return callCount;
}
else {
this.logStep('ForButtonCaption response.collection.getCount() is ZERO');
return -1;
}
return -1;
}
else {
this.logStep('ForButtonCaption callCount response.success is false');
return -1;
}
}, this);
this.logStep('getCallCount finished...');
},
Нравится
Добрый день
У вас не получится сделать синхронным асинхронный вызов. Вам нужно сделать bind свойства на атрибут модели, а в обработке callback'а асинхронной функции устанавливать значение того же атрибута
Пример:
diff: [ { ... "caption": {"bindTo": "MyAttribute"} ... }] ... methods: { someFunction: function() { var callback = function(value) { this.set("MyAttribute", value); }.bind(this); this.callAsync(callback); } }
Артем Гура,
Спасибо! Смотрится интересно, буду пробовать. Мне интересно как делать в платформе подряд два асинхронных вызова, когда вызов второго зависит от ответа первого. Конкретная задача: юзар нажимает кнопку "позвонить", запросом проверяем в бд первый звонок если да то делаем вызов инсерт иначе апдейт - это уже сделано, но как далее в методе клик кнопки еще и каптион ее поменять с "позвонить" на "позвонить (1, 2, 3)" Вроде ваш ответ поможет, спасибо. Какая практика по подобным сценариям, ща осваиваю фронтэнд, в основном на c# писал и куча приколов...
Артем Гура,
Попробую спросить в более точной форме.
Дано:
attributes: {
"IsButtonVisible": {
"dataValueType": Terrasoft.DataValueType.BOOLEAN,
"value": false
},
"ButtonCaption": {
"dataValueType": Terrasoft.DataValueType.TEXT,
"value": "Позвонить"
}
},
diff: [{
"operation": "insert",
"name": "bnBackCall",
"parentName": "DataGrid",
"propertyName": "activeRowActions",
"index": 111,
"values": {
"className": "Terrasoft.Button",
"style": Terrasoft.controls.ButtonEnums.style.GREY,
"caption": { "bindTo": "ButtonCaption" },
"tag": "tagBnBackCall"
}
},
Где мне нужно менять каптион кнопки моей, по логике в
rowSelected: function(Id)
{
//this.setButtonCaption(Id);
this.set("ButtonCaption", "КАПТИОН");
},
Но так не работает, при этом мне нужно устанавливать каптион в зависимости от значения прочитанного с БД (это умею), но эта функция чтения асинхронная, как это нормально сделать???
QArt,
Попробуйте сделать присвоение caption в отдельном методе, а уже в методе клика на кнопку можно вызывать его.
Demchenko Olha,
Спасибо, пробовал. Пришлось через js править, плохо что у террасофт если рендеринг поменяется в следующей версии то придется править. Каптион - волшебный, не меняется через атрибуты и ресурсы советовали, но тоже самое биндинг с полем каптион не помогает.
QArt,
Почитайте документацию
https://academy.terrasoft.ru/documents/technic-sdk/7-11/dobavlenie-knop…, там и примеры есть реализации. Попробуйте сделать как там, просто вывести кнопку с caption через привязку к локализируемой строке схемы, не делая значение изменяемым. А когда уже получится стандартную кнопку вывести, тогда и пробуйте экспериментировать.