JSFiddle - React, Tailwind, and code Playground
JavaScript
var myBalloonContentLayout = ymaps.templateLayoutFactory.createClass(
'{{object.id}}<span class="Hballoon">{% if properties.loaded %}{{properties.contentHeader}}{% else %}<strong>{{properties.title}}</strong>{% endif %}, {{properties.tPlace}}</span>' +
'{% if properties.loaded %}{{properties.contentBody}}{% else %}<p>Загрузка...</p>{% endif %}', {
build: function() {
myBalloonContentLayout.superclass.build.call(this);
var object = this.getData();
if (!object.properties.get('loaded') {
getPlaceInfo(object).then(response => {
object = response;
console.log(object);
this.rebuild();
});
}
}
});
function getPlaceInfo(object) {
var defer = ymaps.vow.defer();
var jqXHR = $.get('data_json.php?nid=' + object.object.id.slice(2), function(data) {
var place_data = JSON.parse(data);
object.properties.set('contentHeader', '<a href="' + place_data.href + '" target="_blank">' + object.properties.get('title') + '</a>, ' + object.properties.get('tPlace'));
object.properties.set('contentBody', '<p>' + place_data.text + '</p>');
object.properties.set('loaded', true);
defer.resolve(object);
});
jqXHR.fail(function() {
object.properties.set('contentHeader', object.properties.get('title'));
object.properties.set('contentBody', '<p>Невозможно получить данные.</p>');
object.properties.set('loaded', true);
defer.resolve(object);
});
return defer.promise();
}