我有一个主动编辑模型名称的输入。 问题是如果我开始输入输入,输入会接受更改。
所以写一个categoryName(recordCategory的一个属性),其值为" Something Else"将是一个巨大的家务活,因为我需要在我输入的每个字母后重新关注edit-recordCategory输入。因此,如果我专注于输入,我会快速键入" Some",它会接受' S'之前没有把我从输入中取出来并根据它的当前值在列表中使用recordCategory,这只会是" 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&#39; acceptChanges&#39;行动。我收到了同样的问题。
TEST 1
我在{{edit-recordCategory value=categoryName focus-out="acceptChanges" insert-newline="acceptChanges"}}
中注释了acceptChanges操作以及它的两个引用,只是{{edit-recordCategory value=categoryName}}
。 同样的问题仍在发生。这让我相信问题不在于写入acceptChanges的方式。
有一点,我的原始&#39; acceptChanges&#39;行动及其在
中的使用{{edit-recordCategory value=categoryName focus-out="acceptChanges"
insert-newline="acceptChanges"}}
工作得很好。
TEST 2
除了取消&#39; acceptChanges&#39;的任何引用之外,我删除了{{#if Editing}}条件。
{{edit-recordCategory value=categoryName focus-out="acceptChanges"
insert-newline="acceptChanges"}}
在打字时没有消失(正如预期的那样没有条件,但我输入时{{edit-recordCategory}}
仍然自动提交。还应该注意这个recordCategories列表自行排序,所以在接受编辑时,我专注于{{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'),
并采取了&#39; searchResults&#39;从{{#each searchResults itemController="recordCategory"}}
开始编辑工作顺利,但现在我的搜索栏过滤器无效。
答案 0 :(得分:1)
您的categoryName
属性在您的模型上,这意味着您可以在控制器中覆盖它。您需要在控制器上使用临时属性来解决问题。
recordCategory: '',
actions: {
acceptChanges: function() {
var recordCategory = this.get('recordCategory');
this.set('model.recordCategory', recordCategory);
}
}