Model view controller emberjs{{{#if variable}}布尔值不会显示为true

Model view controller emberjs{{{#if variable}}布尔值不会显示为true,model-view-controller,ember.js,controller,conditional,handlebars.js,Model View Controller,Ember.js,Controller,Conditional,Handlebars.js,当 {{操作“编辑”此}}按钮被单击 单击“编辑”时,变量不会将自身设置为true。我将控制台.log'd设置为确保“编辑”知道我正在单击它,它确实这样做了。这在emberjs网站上看起来很简单,我不知道为什么我现在有这样的麻烦 类别控制器 VpcYeoman.CategoriesController = Ember.ArrayController.extend({ isEditing: false, actions: { editingyeah: functio

当 {{操作“编辑”此}}按钮被单击

单击“编辑”时,变量不会将自身设置为true。我将控制台.log'd设置为确保“编辑”知道我正在单击它,它确实这样做了。这在emberjs网站上看起来很简单,我不知道为什么我现在有这样的麻烦

类别控制器

VpcYeoman.CategoriesController = Ember.ArrayController.extend({
    isEditing: false,
    actions: {
        editingyeah: function(){
            console.log('Testing console'); //this works
            this.set('isEditing', true); //this doesnt change to true since the {{Else}} is what is being rendered.
        }        
    },

});
类别.哈佛商学院

    {{#each}}
      <tr class="people-list">
        <td>
          {{#if isEditing}}
          {{view Ember.TextField valueBinding=name}}
          NOOOOOOOO
          {{else}}
          <div class="category-text"> 
          {{view Ember.TextField valueBinding=name}}
            {{#linkTo 'category' this}}
              {{name}}
            {{/linkTo}}
          </div>
          {{/if}}  
          <img class="table-img" src="images/x.png">
          <img class="table-img" {{action "editingyeah" this}} src="images/pencil-grey.png">          
        </td>
      </tr>
    {{/each}}
{{#each}
{{#如果是编辑}
{{view Ember.TextField valueBinding=name}
不
{{else}
{{view Ember.TextField valueBinding=name}
{{{#链接到“类别”this}
{{name}}
{{/linkTo}
{{/if}
{{/每个}}

在我发表评论后,我看到了您的问题。您的作用域中没有定义
isEditing
变量。您正在使用
#each
帮助程序,它会更改模板的范围。使用
#each
时必须保留作用域,或者使用带有
帮助程序的
#

{{#each item in model}}
    {{! isEditing is available now }}
    {{! But you have to do item.name instead of name}}
{{/each}}


在我发表评论后,我看到了你的问题。您的作用域中没有定义
isEditing
变量。您正在使用
#each
帮助程序,它会更改模板的范围。使用
#each
时必须保留作用域,或者使用带有
帮助程序的
#

{{#each item in model}}
    {{! isEditing is available now }}
    {{! But you have to do item.name instead of name}}
{{/each}}


这是因为您正在循环遍历每个类别,因此
每个
帮助器中的上下文就是您的类别。它正在查找类别上的
isEditing
属性,而不是控制器中的属性

由于要将类别传递给操作,因此可以将其作为操作函数中的参数进行访问,并改为设置类别的属性:

actions: {
    editingyeah: function(category){
        category.set('isEditing', true);
    }        
}

这是因为您正在循环遍历每个类别,因此
每个
帮助器中的上下文就是您的类别。它正在查找类别上的
isEditing
属性,而不是控制器中的属性

由于要将类别传递给操作,因此可以将其作为操作函数中的参数进行访问,并改为设置类别的属性:

actions: {
    editingyeah: function(category){
        category.set('isEditing', true);
    }        
}

是否未设置值,或模板是否未更新?尝试在设置后直接执行
console.log(this.get('isEditing'))
。控制台返回“true”。I编辑是真的。{{#if isEditing}也应该为true并呈现第一个Ember.TextField吗?该值是否未设置,或者模板是否未更新?尝试在设置后直接执行
console.log(this.get('isEditing'))
。控制台返回“true”。I编辑是真的。是否应该{{if isEditing}也为true并呈现第一个Ember.TextField?+1您可以这样做,或者您可以指定一个项(对象)控制器。我倾向于避免修改集合(数组)控制器中的单个项属性,因为它可能会变得有点混乱。+1您可以这样做,也可以指定一个项(对象)控制器。我倾向于避免修改集合(数组)控制器中的单个项属性,因为它可能会变得有点混乱。此解决方案也有效,但我最终使用了上面的解决方案此解决方案也有效,但我最终使用了上面的解决方案