Ember.js - Как я могу запретить моей панели ввода для редактирования автоматически принимать изменения, если я набираю

0

У меня есть вход, который активно редактирует имя модели. Проблема в том, что вход принимает изменения, если я начну вводить ввод.

Поэтому писать categoryName (атрибут recordCategory) со значением "Something Else" было бы огромным хором, потому что мне нужно было переориентироваться на ввод edit-recordCategory после каждой буквы, которую я печатаю. Поэтому, если бы я сосредоточился на вводе, и я бы быстро напечатал "Some", он бы принял "S" перед тем, как отключить меня от ввода и прибегнуть к записи в категории, основанной на его текущем значении, которое было бы "только", S".

Вот более подробный пример моего кода.

{{#each searchResults itemController="recordCategory"}}
    <div id="hoveredRow" {{bind-attr class="isEditing:editing"}}>
      {{#if isEditing}}
          <div class="input-standard">
            {{edit-recordCategory value=categoryName focus-out="acceptChanges"
             insert-newline="acceptChanges"}}
          </div>
      {{else}}
        {{categoryName}}
      {{/if}}
    </div>
{{/each}}

Это мой контроллер

isEditing: false,
  actions: {
    editrecordCategory: function(recordCategory){
        this.set('isEditing', true);
        console.log(this.get('isEditing is toggling'))
    },
    acceptChanges: function() {
      this.set('isEditing', false);
      if (Ember.isEmpty(this.get('model.categoryName'))) {
        this.send('removerecordCategory');
      } else {
        this.get('model').save();
      }
      console.log(this.get('isEditing'))
    },
  }

а затем представление, которое определяет edit-recordCategory

VpcYeoman.EditRecordCategoryView = Ember.TextField.extend({
  didInsertElement: function() {
    this.$().focus();
  }
});

Ember.Handlebars.helper('edit-recordCategory', VpcYeoman.EditRecordCategoryView);

РЕДАКТИРОВАТЬ:

После реализации GJK-версии действия acceptChanges. Я получал ту же проблему.

ИСПЫТАНИЕ 1

Я прокомментировал действие acceptChanges и обе его ссылки в {{edit-recordCategory value=categoryName focus-out="acceptChanges" insert-newline="acceptChanges"}} сделав его просто {{edit-recordCategory value=categoryName}}. Та же проблема все еще происходит. Это заставляет меня поверить, что проблема не в том, как было принято принятие изменений.

Был момент, когда мое оригинальное действие acceptChanges и его использование в

{{edit-recordCategory value=categoryName focus-out="acceptChanges"
             insert-newline="acceptChanges"}}

работал отлично.

ТЕСТ 2

Вместо того, чтобы вынимать любую ссылку "acceptChanges", я удалил условие {{#if Editing}}.

{{edit-recordCategory value=categoryName focus-out="acceptChanges"
             insert-newline="acceptChanges"}}

не исчезает при вводе (как и ожидалось, при отсутствии условного условного {{edit-recordCategory}}, но {{edit-recordCategory}} прежнему автоматически отправляется при {{edit-recordCategory}}. Следует также отметить, что этот список recordCategories сортирует себя, поэтому, принимая разрешение, Я сосредоточен на {{edit-recordCategory}} и объект {{edit-recordCategory}} на него на основе нового значения categoryName

Проблема найдена! Но это ломает мой фильтр.

Как только я прокомментировал эту функцию

searchResults: function() {
    var searchTerm = this.get('searchTerm');
    var regExp = new RegExp(searchTerm,'i');

    // We use 'this.filter' because the contents of 'this' is an array of objects
    var filteredResults = this.filter(function(category) {
        return regExp.test(category.get('categoryName'));
    });

    return filteredResults;
}.property('@each.categoryName', 'searchTerm'),

и взял "searchResults" из {{#each searchResults itemController="recordCategory"}} чтобы редактировать работало плавно, но теперь мой фильтр панели поиска не работает.

  • 0
    Почему меня опровергли?
Теги:
handlebars.js
ember.js
edit

1 ответ

1
Лучший ответ

Свойство categoryName находится на вашей модели, что означает, что вы можете переопределить его в своем контроллере. Вы захотите использовать временное свойство на своем контроллере, чтобы решить проблему.

recordCategory: '',

actions: {
    acceptChanges: function() {
        var recordCategory = this.get('recordCategory');
        this.set('model.recordCategory', recordCategory);
    }
}
  • 0
    У меня все та же проблема, но я не думаю, что это потому, что ваше решение недействительно. Увидев ту же проблему, я закомментировал действие acceptChanges и обе его ссылки в {{edit-recordCategory value = categoryName focus-out = "acceptChanges" insert-newline = "acceptChanges"}}, сделав его просто {{edit-recordCategory значение = CategoryName}}. Та же проблема все еще происходит. Я обновлю вопрос.
  • 1
    Просто для пояснения, ваша проблема в том, что свойство categoryName в вашей модели обновляется по мере ввода, а не обновляется только при вызове acceptChanges , верно?
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню