2012-07-18 2 views
7

Mam Ember.Controller, z kodem konfiguracyjnym w funkcji init. W rzeczywistości ten kod sprawia, że ​​AJAX żąda. Ale kiedy tworzę dwa wystąpienia tego kontrolera, zawsze są one równe. Dlaczego i co mogę zrobić ponownie?Kontrolery z ustawieniami w funkcji init są zawsze równe

Zrobiłem ten prosty przykład, który chciałby napisać Test 1Test 2 do konsoli. Bit dwa razy pisząc Test 2.

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')); 


​ 

Odpowiedz

18

Musisz ustawić content wartość w init, w przeciwnym razie wartość ustawiona w momencie deklaracji klasy będą udostępniane przez wszystkie instancje.

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

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

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

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

+0

Hm, widzę. Ale czy to błąd i zostanie naprawiony, czy to jest pomysł? Jeśli to feauture, jaki jest powód? – Lux

+1

Jest to część modelu obiektu JavaScript/Ember. Zobacz https://github.com/emberjs/ember.js/issues/462. Prawdopodobnie nigdy się nie zmieni ... –

+5

Nie zapomnij również wywołać 'this._super();' wewnątrz swojej niestandardowej funkcji 'init' ... – pangratz

Powiązane problemy