Ember.js - 如果我输入,如何停止编辑输入栏以自动接受更改

时间:2014-03-31 22:39:46

标签: javascript jquery ember.js handlebars.js edit

我有一个主动编辑模型名称的输入。 问题是如果我开始输入输入,输入会接受更改。

所以写一个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}}仍然自动提交。还应该注意这个rec​​ordCategories列表自行排序,所以在接受编辑时,我专注于{{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"}}开始编辑工作顺利,但现在我的搜索栏过滤器无效。

1 个答案:

答案 0 :(得分:1)

您的categoryName属性在您的模型上,这意味着您可以在控制器中覆盖它。您需要在控制器上使用临时属性来解决问题。

recordCategory: '',

actions: {
    acceptChanges: function() {
        var recordCategory = this.get('recordCategory');
        this.set('model.recordCategory', recordCategory);
    }
}