2014-10-10 36 views
6

Posiadam komponent rozszerzony z pola plików, i dodałem do niego właściwość niestandardową "ścieżka_serwera", a także zdefiniowałem program pobierający i ustawiający.extjs 5: utworzyć powiązanie danych dla niestandardowej właściwości komponentu

Kod:

Ext.define('MyApp.ux.Field.File',{ 
    extend:'Ext.form.field.File', 
    xtype:'myfilefield', 
    serverPath:'', 
    getServerPath:function(){ 
    return this.serverPath; 
}, 
setServerPath:function(serverPath){ 
    this.serverPath = serverPath; 
} 
}); 

Ext.create('MyApp.ux.Field.File',{ 
    bind:{ 
     serverPath:'{serverPath}' 
    }, 
    viewModel:{ 
     type:'myViewModel' 
    } 
}); 

nie będę wkleić definicję myViewModel użytkownika. to jest proste.

i okazało się, że wiązanie nie działa.

Czy ktoś może pomóc?

Odpowiedz

8

Twoja klasa powinna być:

Ext.define('MyApp.ux.Field.File',{ 
    extend:'Ext.form.field.File', 
    xtype:'myfilefield', 
    config: { 
    serverPath:'' 
    } 
}); 

i powinno być wszystko gotowe ponieważ ExtJS stworzy setter i getter dla ciebie, jak i setter. w widoku modelu upewnij się, że masz:

data: { 
    serverPath : 'yourPathGoesHere' 
} 

Zmieniano Są dwie rzeczy, które były missing:

  1. Gdy wartość na ViewModel zmienia zmiany są asynchronicznie opublikowanej przez planista. Jeśli chcesz, aby zmiany odzwierciedlone były w sposób nieumyślny, musisz użyć funkcji powiadomień na ViewModel lub odrzucić logikę po zmianie.
  2. Aby uzyskać niestandardowe właściwości konfiguracji klasy, aby zwrócić ViewModel zmian, należy dodać je do właściwości konfiguracyjnej "publikuj". Patrz: updated fiddle.
+0

Próbowałem twojej sugestii i przepraszam, gdy się dowiedziałem, że to nie zadziałało. – happyyangyuan

+0

Witam, jeśli możesz dostarczyć coś w rodzaju JSFiddle/Sencha Fiddle, byłoby wspaniale, żebym mógł lepiej odtworzyć i ewentualnie pomóc w rozwiązaniu problemu. –

+0

cześć, za dużo dla ciebie. cały problem jest tutaj: https://github.com/happyyangyuan/Q-A/issues/1 – happyyangyuan