2 votes

Le texte de l'option devient une chaîne de fonction après la mise à jour avec fromJS

Pourquoi le texte de l'option est-il converti en une chaîne de caractères d'une fonction après que les valeurs ont été mises à jour à partir de ko.mapping.fromJS ?

Un échantillon : http://jsfiddle.net/tYnc6/24/

Html :

<div>
    <select data-bind="options: items, value: selected, optionsText: function(item) { return ('[' + item.Id + '] ' + item.Name) }, optionsCaption: 'Choose...'"></select>
    <button data-bind="click: update">Update</button>
</div>

Javascript :

var mapping = {
        key: function(data) {
            return ko.utils.unwrapObservable(data.Id);
    }
};

viewModel = {
    items: ko.observableArray([
        {Name: 'foo', Id: '1'},
        {Name: 'bar', Id: '2'}
    ]),
    selected: ko.observable(),

    update: function() {
        data = [
            {Name: 'foo', Id: '1'},
            {Name: 'bar', Id: '2'},
            {Name: 'baz', Id: '3'}
        ];
        ko.mapping.fromJS(data, mapping, this.items);
    }
}
ko.applyBindings(viewModel);

Remarquez qu'après avoir appuyé sur la touche de mise à jour, le texte de l'option devient une fonction.

3voto

RP Niemeyer Points 81663

Les données qui ont été transmises par le plugin de cartographie sont maintenant devenues Name y Id en observables. Ainsi, lorsque votre fonction fait '[' + item.Id + '] ' + item.Name vous concaténerez des chaînes de caractères avec des observables (qui sont des fonctions).

Si le Name y Id sont toujours observables, alors vous voudriez faire :

'[' + item.Id() + '] ' + item.Name()

Si vous souhaitez prendre en charge les observables ou les non-observables, vous pourriez faire quelque chose comme :

'[' + ko.utils.unwrapObservable(item.Id) + '] ' + ko.utils.unwrapObservable(item.Name)

ko.utils.unwrapObservable retournera correctement la valeur pour un observable ou un non-observable.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X