2012-04-10 3 views
4

zu deklarieren Ich habe die Ember.js Dokumentation + Beispiele gelesen, und verschachtelte Ansichten mit Bindungen verwirren mich ein wenig.Korrekte Weise, die Bindung in Ember.js

Ich habe die folgenden abgekürzt HTML (adaequat):

{{#view App.outerArea}} 
    {{#view innerArea}} 
     {{view Ember.TextField valueBinding="parentView.parentView.bound.username"}} 
    {{/view}} 
{{/view}} 

... und JavaScript (auch adaequat):

App = Ember.Application.create(); 
App.outerArea = Ember.View.extend({ 
    bound : { 
     username:'test', 
    }, 
    innerArea: Ember.View.extend({}), 
}); 

(Wenn ich innerArea aus dem HTML entfernen kann ich 'parentView.parentView.' entfernen vollständig)

Um dies zu bereinigen ich versucht habe.

... 
{{view Ember.TextField valueBinding="bound.username"}} 
... 
innerArea: Ember.View.extend({ 
    bound: function() { 
     return App.outerArea.bound; 
    } 
}) 

Und versucht:

{{view Ember.TextField valueBinding="getPath(bound.username)"}} // with above bound: function(). 

Und einige andere Kombinationen, aber sie nicht funktionieren.

Gibt es einen eleganten Weg ‚parentView.parentView.bound.username‘ aus dem TextField- valueBinding zu verweisen? Gibt es mehr als einen Ansatz dazu? Was sind die besten Designmuster für so etwas?

Vielen Dank!

Antwort

2

Zuerst wird in dem ursprünglichen Beispiel, Sie benötigen nur eine parentView Textfeldwert (siehe http://jsfiddle.net/MikeAski/tkDp6/) zu binden.

Zweitens, die Art und Weise Sie bound Bindung in Innenansicht definieren, ist nicht gut: Sie sollten versuchen:

... 
innerArea: Ember.View.extend({ 
    boundBinding: 'parentView.bound' 
}) 

(siehe http://jsfiddle.net/MikeAski/tkDp6/2/)

+0

Vielen Dank für die Antwort. Der Code, den ich oben mit parentView.parentView habe, arbeitet definitiv lokal in einem isolierten Projekt. (Ich war sehr vorsichtig dabei!) Aber klar, dein Geigencode funktioniert auch! Meine ember.js können alt sein. Ich werde es prüfen. Edit: Ja, ich war auf 0.9.2. Ich habe auf 0.9.6 aktualisiert und es funktioniert jetzt richtig. – shs

+0

Also mit Ember 0.9.6 habe ich eine Schaltfläche auf der gleichen Ebene wie das TextField oben hinzugefügt. Und die Schaltfläche möchte ein Ziel von parentView.parentView. Scheint das merkwürdig? http://jsfiddle.net/K2v54/1/ – shs

+0

Das ist normal: Die Button-Ansicht befindet sich innerhalb der 'innerArea'-Ansicht, die sich innerhalb der' uterArea'-Ansicht befindet, um 'outerArea.submitLogin' aus dem Button-View-Bereich aufzurufen, Wir müssen zweimal nach oben gehen: zuerst, um den Bereich von "innerArea" zu erhalten, und um wieder den Bereich von "outerArea" zu erhalten. –