0

當 {{action「edit」this}}按鈕處於「類別」控制器中時,我設置了一個簡單的布爾值(isEditing)點擊。emberjs {{#if variable}}布爾值將不會顯示爲true

單擊'編輯'時,變量不會設置爲true。我console.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. 
     }   
    }, 

}); 

categories.hbs

{{#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}} 
+1

是價值未被設置,或是不是正在更新模板?嘗試在設置後直接使用console.log(this.get('isEditing'))''。 – GJK

+0

控制檯返回'true'。 IsEditing是真實的。 Should not {{#if isEditing}}也是如此,並呈現第一個Ember.TextField? –

回答

4

這是因爲您是通過每個類別循環,所以each助手裏的背景是你的類別。它正在尋找類別上的isEditing屬性,而不是控制器中的屬性。

既然你是路過的類別中的動作,您可以訪問它作爲行動的功能參數,並設置該屬性的類別,而不是:

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

+1您可以這樣做,或者您可以指定一個項目(對象)控制器。我傾向於避免修改集合(數組)控制器中的單個項目屬性,因爲它可能會有點混亂。 –

+0

我的英雄!這解決了它! –

1

我看到了你的問題,我貼我的意見後。您沒有在範圍中定義的isEditing變量。您正在使用#each幫助程序,它將更改模板的範圍。您在使用#each時必須保留示波器,或使用幫助器#with

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

或者

{{#with this.isEditing as isEditing}} 
    {{#each}} ... {{/each}} 
{{/with}} 
+0

這個解決方案也有效,但我最終使用了上面的一個 –