web-dev-qa-db-fra.com

Javascript/Ember - Basculer la valeur booléenne de la variable

Je sais qu'il existe la méthode .set () pour définir un booléen sur true ou sur false, mais je veux savoir s'il existe une méthode telle que .set (), sauf qu'elle bascule la valeur d'un booléen.

Dans ce cas, la valeur booléenne isEditing est définie sur "true".

isEditing:false,
actions: {
  edit: function(category){
    category.set('isEditing', true);
    console.log(this.get('isEditing'))
  },
}

Voici le html 

{{#if isEditing}}
  <div class="category-text"> 
    {{view Ember.TextField valueBinding=name action="turnOffEditMode"}}
  </div>
{{else}}
  <div class="category-text"> 
    {{#linkTo 'category' this}}
      {{name}}
    {{/linkTo}}
  </div>
{{/if}}  
18
Ian S
this.toggleProperty('propertyName');

Edit: jsbin for proof

47
Jake Roby
isEditing:false,
actions: {
    edit: function(category){
        category.set('isEditing', !category.isEditing);
        console.log(this.get('isEditing'))
    }
    toggleEditing : function(category){
    }
}

Basculer la valeur booléenne est ce dont vous avez besoin. Ou vous pouvez changer votre fonction comme ci-dessous.

isEditing:false,
actions: {
    toggleEditing : function(category){
        category.set('isEditing', !category.isEditing);
        console.log(this.get('isEditing'));
    }
}
4
Triode

La réponse de @ gravityplanx est excellente.

Je veux juste ajouter que cette méthodologie fonctionne également au-delà du contrôleur.

Par exemple, si mon modèle a un objet Post, je peux le mettre à jour à partir du contrôleur. Je dois juste passer l'objet dans une action de contrôleur.

switch_readiness(post) {
    post.toggleProperty('isPublishReady');
}
0
Cameron