У меня есть вход, который активно редактирует имя модели. Проблема в том, что вход принимает изменения, если я начну вводить ввод.
Поэтому писать 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"}}
чтобы редактировать работало плавно, но теперь мой фильтр панели поиска не работает.
Свойство categoryName
находится на вашей модели, что означает, что вы можете переопределить его в своем контроллере. Вы захотите использовать временное свойство на своем контроллере, чтобы решить проблему.
recordCategory: '',
actions: {
acceptChanges: function() {
var recordCategory = this.get('recordCategory');
this.set('model.recordCategory', recordCategory);
}
}
categoryName
в вашей модели обновляется по мере ввода, а не обновляется только при вызове acceptChanges
, верно?