2013-05-04 6 views
1

j'ai vu dans la documentation Ember je pourrais mettre en place une liaison à l'aide extrait similaire:Comment mettre en place des liaisons de Braise

householdIncomeBinding: 'App.wife.householdIncome' 

Cependant, je voudrais mettre en place des liaisons en fournissant des objets au lieu de chaînes (chemin de portée mondiale). Je dois obtenir quelque chose de similaire à ceci:

Ember.bind(obj1, "obj1AttributeName", obj2, "obj2AttributeName"); 

suggestions sont les bienvenues. Merci!

Répondre

2

Manchettes peut être connecté directement à un seul objet. Les chemins from et to sont évalués par rapport à l'objet auquel ils sont connectés. Ces chemins peuvent également être globaux.

Vérifiez la docs and implementation pour l'aide Ember.bind:

/** 
    Global helper method to create a new binding. Just pass the root object 
    along with a `to` and `from` path to create and connect the binding. 

    @method bind 
    @for Ember 
    @param {Object} obj The root object of the transform. 
    @param {String} to The path to the 'to' side of the binding. 
    Must be relative to obj. 
    @param {String} from The path to the 'from' side of the binding. 
    Must be relative to obj or a global path. 
    @return {Ember.Binding} binding instance 
*/ 
Ember.bind = function(obj, to, from) { 
    return new Ember.Binding(to, from).connect(obj); 
}; 

Donc, vous devez décider quel objet que vous souhaitez vous connecter la liaison directement, et comment il peut faire référence à l'autre objet. Vous avez un couple d'options:

A) offrent une certaine relation entre les deux objets, puis utilisez bind() pour connecter des chemins relatifs:

obj1.set('friend', obj2); 
Ember.bind(obj1, 'obj1AttributeName', 'friend.obj2AttributeName'); 

B) Fournir un chemin global sur le côté from du de liaison:

App.set('obj2', obj2); // make obj2 accessible from the App namespace 
Ember.bind(obj1, 'obj1AttributeName', 'App.obj2.obj2AttributeName'); 
+0

Merci pour l'information. BTW avez-vous une idée de la raison pour laquelle l'API de liaison ressemble à ceci? De mon point de vue, l'API de liaison en cours pourrait bien convenir dans de nombreux cas, mais en même temps, il y aura des scénarios dans lesquels une API de liaison générique sera meilleure. Je ne pense pas que je devrais être forcé de faire un lien direct entre les deux objets ou de fournir un chemin global pour au moins un des objets. – Flexer

+0

C'est une bonne question. Les liaisons sont généralement liées lors de la définition de modèles, de vues, de contrôleurs et de modèles, et ne sont pas créées de manière ad hoc. Dans tous les cas d'utilisation typiques, les liaisons peuvent être connectées à un objet et ne référencer l'autre que par rapport à cet objet (ou à travers une référence globale). J'imagine que les fixations ont été conçues pour répondre à ces cas d'utilisation et n'ont jamais été prolongées par manque de besoin. Il s'agit également d'un domaine de performance sensible, de sorte qu'il peut y avoir une réticence à modifier une telle fonctionnalité de base sans une bonne cause. –

0

Voici un exemple comment vous pouvez les liaisons de configuration, j'ai pris l'exemple du site de ember.js (http://emberjs.com/guides/object-model/bindings/) et personnalisé à votre question,

App.wife = Ember.Object.create({ 
householdIncome: null 
}); 

App.husband = Ember.Object.create({ 
householdIncomeBinding: 'App.wife.householdIncome' 
}); 

App.husband.get('householdIncome'); // null 

// if you now set the householdIncome to a new Ember.Object 
App.husband.set('householdIncome', Ember.Object.create({amount:90000})); 

// with bindings working you should be able to do this 
App.wife.get('householdIncome.amount'); // 90000 

espère que cela aide

Questions connexes