2012-07-18 12 views
7

Ho un Ember.Controller, con codice di installazione nella funzione init. In realtà questo codice fa richieste AJAX. Ma quando creo due istanze di questo controller, sono sempre uguali. Perché, e cosa posso fare ancora?I controller con setup nella funzione init sono sempre uguali

Ho fatto questo semplice esempio, che è possibile scrivere Test 1Test 2 nella console. È stato scritto il bit Test 2 due volte.

App = Em.Application.create({}); 

App.TestController = Em.Controller.extend({ 
    content: Em.Object.create({ 
     info: null, 
    }), 
    init: function() { 
     if(this.id == 1) 
     { 
      this.content.set('info', "Test 1"); 
     } 

     if(this.id == 2) 
     { 
      this.content.set('info', "Test 2"); 
     } 
    }, 
}); 

var c1 = App.TestController.create({id: 1}); 
var c2 = App.TestController.create({id: 2}); 

console.log('C1: ' + c1.get('content').get('info')); 
console.log('C2: ' + c2.get('content').get('info')); 


​ 

risposta

18

è necessario impostare content valore nel init, in caso contrario, il valore impostato al momento della dichiarazione di classe saranno condivisi da tutte le istanze.

App.TestController = Em.Controller.extend({ 
    content: null, 

    init: function() { 
    this._super(); 
    this.set('content', Em.Object.create({ 
     info: null 
    })); 

    // other setup here... 
    } 
}); 

Vedi http://codebrief.com/2012/03/eight-ember-dot-js-gotchas-with-workarounds/

+0

Hm, vedo. Ma questo è un bug e verrà risolto, o è questa l'idea? Se è una bellezza, qual è il motivo? – Lux

+1

Fa parte del modello Object di Javascript/Ember. Vedi https://github.com/emberjs/ember.js/issues/462. Probabilmente non cambierà mai ... –

+5

Inoltre, non dimenticare di chiamare 'this._super();' all'interno della tua funzione personalizzata 'init' ... – pangratz

Problemi correlati