2012-04-16 3 views
1

Je viens de commencer à utiliser ember.js. J'ai deux modèles dans mon application. Une qui contient des données et une qui contient ces données éditées par l'utilisateur. Je les lie en utilisant une liaison à sens unique.propriétés de rebind dans le modèle, emberjs

App.ViewModel = Ember.Object.create({ 
    title:'title', 
    text:'text', 
)}; 

App.EditModel = Ember.Object.create({ 
    titleBinding: Ember.Binding.oneWay('App.ViewModel.title'), 
    textBinding: Ember.Binding.oneWay('App.ViewModel.text'), 
)}; 

Je laisse un utilisateur éditer les données dans le modèle EditModel. Mais si l'utilisateur rejette les changements, je veux être en mesure de remettre les valeurs à l'état avant l'édition, c'est à dire. aux valeurs dans ViewModel.

Existe-t-il un moyen de relier ces propriétés? Ou pour augmenter manuellement l'événement de modification sur les propriétés dans ViewModel afin que EditModel soit mis à jour? Ou toute autre approche à mon problème?

Répondre

3

Vous pouvez créer une coutume mixin qui gère la remise à zéro pour un modèle, voir http://jsfiddle.net/pangratz666/CjB4S/

App.Editable = Ember.Mixin.create({ 
    startEditing: function() { 
     var propertyNames = this.get('propertyNames'); 
     var props = this.getProperties.apply(this, propertyNames); 
     this.set('origProps', props); 
    }, 
    reset: function() { 
     var props = this.get('origProps'); 
     Ember.setProperties(this, props); 
    } 
}); 


App.myModel = Ember.Object.create(App.Editable, { 
    propertyNames: ['title', 'text'], 
    title: 'le title', 
    text: 'le text' 
}); 

Et plus tard dans les vues que vous invoquez juste le startEditing quand vous voulez prendre un instantané des valeurs actuelles et reset lorsque vous souhaitez rétablir l'instantané précédent des valeurs.

+0

Regardez bien! Nous pourrions même imaginer une sorte d'automatisation en observant les états du modèle, en utilisant des modèles de données de braises. –

+0

Je voudrais ajouter que la spécification du tableau propertyNames sur le modèle a été utilisée séparément pour générer des objets propres à envoyer au serveur. Bon contact – joevallender

Questions connexes