2017-10-15 1 views
0

Je voudrais faire une copie profonde du tableau ci-dessous. Et le result doit uniquement observer la propriété count.knockout Mapping pour le tableau d'objets, pour certaines propriétés en utilisant 'observer'

data = [{ 
     id: 1, 
     code: 'ABC', 
     count: ko.observable(0) 
    },{ 
     id: 2, 
     code: 'JKL', 
     count: ko.observable(5) 
    },{ 
     id: 3, 
     code: 'QWE', 
     count: ko.observable(1) 
    }] 

J'ai essayé mais id et code a également été converti en observables. Actuellement, j'utilise le code ci-dessous pour obtenir le résultat attendu.

var obj = ko.mapping.toJS(data); 
var result = []; 
obj.forEach(function(o){ 
    var obs = ko.mapping.fromJS(o, { 
     'observe': "count" 
    }); 
    result.push(obs); 
}); 
// result will give the expected result 

Ici, j'ai utilisé forEach pour boucler chaque objet dans le tableau data. Y at-il un moyen d'éviter la boucle forEach? ou Comment observer uniquement la propriété count dans le tableau de l'objet.

Répondre

1

Vous pouvez éviter la forEach ainsi que d'observer que count comme ceci:

var result = ko.mapping.fromJS(data, {observe: 'count'}); 
console.log(result()); 

Modifier:

Selon les documents, nous ne même pas besoin de mentionner ko.observable dans nos données. Il devrait simplement prendre cela en fonction de notre paramètre 'observer'. vous voudrez peut-être alors peut-être modifier votre data comme ceci:

var data = [{ 
       id: 1, 
       code: 'ABC', 
       count: 0 
      }, { 
       id: 2, 
       code: 'JKL', 
       count: 5 
      }, { 
       id: 3, 
       code: 'QWE', 
       count: 1 
      }]; 

Et puis, en utilisant forEach,

var result = []; 
data.forEach(function(o){ 
    result.push(ko.mapping.fromJS(o, {observe:'count'})); 
}); 
console.log(result); 

Il est à vous, la méthode que vous préférez utiliser.

+0

Merci Ray. Donc, si mes données n'ont pas d'observables (comme mentionné dans la réponse), seule la seconde méthode fonctionne? –

+1

ouais c'est vrai – Ray