2013-01-21 4 views
0

J'ai une propriété rowNumber dans chacun de mes 5 modèles de vue. En outre, il existe une observable calculée basée sur la propriété rowNumber. Voici le code:Héritage dans Knockout.js ViewModels

function EntityViewModel() { 
    this.rowNumber = ko.observable(); 

    this.isOdd = ko.computed(function() { 
     return this.rowNumber() % 2 != 0; 
    }, this); 

    this.isEven = ko.computed(function() { 
     return this.rowNumber() % 2 == 0; 
    }, this); 
} 

J'ai un CountryViewModel qui hérite de EntityViewModel comme suit:

CountryViewModel.prototype = new EntityViewModel(); 

function CountryViewModel() { 
    this.id = ko.observable(); 
    this.name = ko.observable(); 
    this.abbrev = ko.observable(); 
} 

Questions: Puis-je maintenant régler le rowNumber de l'objet CountryViewModel comme suit:

var cvm = new CountryViewModel(); 
cvm.rowNumber(index); 

Dans mon cas, l'observable isOdd/isEven n'est pas calculé correctement. Il semble que rowNumber soit 0, bien que je mette rowNumbers à travers CountryViewModel. Y a-t-il un problème avec la fonction observable calculée - en particulier le contexte mis à cela?

+1

semble fonctionner ** [bien ici] (http://jsfiddle.net/FERxr/)**. Pourriez-vous nous fournir un JSFiddle avec plus de détails sur le problème? – MarcoK

+0

Eh bien, nécessite knockout.js, donc JSFiddle peut ne pas fonctionner. J'ai découvert que tous les modèles Country View ont la valeur de 20 (qui est le dernier rowNumber) Crazy, mais je ne sais pas comment y remédier? – vijayst

+1

Mon JSfiddle comprend également Knockout.js - vous pouvez ajouter des ressources (JS et CSS) dans l'onglet "Gérer les ressources" sur le côté gauche. S'il vous plaît faites un exemple de travail avec votre problème là. – MarcoK

Répondre

1

Plutôt que d'utiliser le prototype que vous pouvez faire quelque chose comme ce qui suit:

function EntityViewModel() { 
    // ... 
} 
function CountryViewModel() { 
    EntityViewModel.apply(this); 
} 

J'ai mis à jour votre jsFiddle comme exemple: http://jsfiddle.net/Ht8GR/4/

+0

merci. reconnaissant un peu en retard :) – vijayst