Angular Xeditable - не может получить правильное значение для проверки с использованием события onbeforesave

Я пытаюсь добавить логику проверки к редактированию значений формата сообщений, которые мы используем. Я создал плункер здесь, чтобы показать проблему. Вот код для проверки фигурных скобок.

vm.formatCheck = function (resource) {

console.log(resource.Value);

if (resource.Value.indexOf('{') > -1 || resource.Value.indexOf('}') > -1) {

    var x = resource.Value.split('{').length - 1;
    var y = resource.Value.split('}').length - 1;

    if ((x + y) % 2 === 1) {
        alert("Incorrect Message format");
        return;
    }

  }
};

Пример: если вы редактируете первое значение ({JobRole} for {Organisation}) и удалите вьющуюся фигурную скобку ({JobRole} for {Organisation)

alert("Incorrect Message format"); никогда не показывает, потому что он получает первоначальное значение - {JobRole} for {Organisation} и не {JobRole} for {Organisation

Если я переместить логику проверки в onaftersave Событие Я получаю правильное значение, и проверка запускается, но он покажет / сохранит неверное значение, которое мне не нужно. Так как я могу обойти это? Любая помощь приветствуется.

  • Не уверен, смогу ли я использовать отсрочку, пообещай решить эту проблему - но не уверен, если вообще возможно с Angular Xeditable?

1 ответ

Решение

Вот мой поршень с ним работает:

По сути, я изменил ваш HTML на это:

<a href="#" e-name="resource" editable-textarea="res.Value" e-rows="5" e-cols="30"
                   onbeforesave="vm.formatCheck($data)"
                   onaftersave="vm.onGridItemChanged(res)">{{ res.Value || 'empty' }}</a></a>

Я передаю $data вместо 'res'. $data - это значение свойства объекта, которое вы на самом деле изменяете.

И в контроллере ваша функция проверки. "Ресурс" теперь является $data, который содержит значение вашего свойства, которое вы пытаетесь изменить. Итак, вы проверяете это и возвращаете сообщение об ошибке. Если вы не хотите, чтобы сообщение об ошибке отображалось рядом с полем, верните "";

vm.formatCheck = function (resource) {

        console.log(resource);

        if (resource.indexOf('{') > -1 || resource.indexOf('}') > -1) {

            var x = resource.split('{').length - 1;
            var y = resource.split('}').length - 1;

            if ((x + y) % 2 === 1) {
                alert("Incorrect Message format");
                return "Incorrect Message format";
            }

        }
    };
Другие вопросы по тегам