2017-04-17 2 views
1

J'ai ci-dessous la liaison personnalisée, son nombre d'étoiles, Sur la page de chargement pour moi init et la mise à jour est appelée mais après cela, seule la fonction init est appelée la fonction de mise à jour. J'ai besoin de la fonction de mise à jour dans laquelle j'ai la classe "Choisi" toggleclass, qui ajoute la classe à la liaison d'étoiles après sélectionnée. Je suis confronté à un problème dans cette suggestion aimable.Knockout.js Reliure personnalisée "La fonction de mise à jour n'est pas appelée"

<div data-role=view id="view1"> 
    <div id="divstarRating" data-bind="click:selectStar"> 
    <span id="Star" data-bind="readonlyStarRating:starpoints"> </span> 
    </div> 
    </div> 
.starRating span { 
    width: 24px; 
    height: 24px; 
    background-image: url(../star.png); 
    display: inline-block; 
    cursor: pointer; 
    background-position: -24px 0; 
} 

.starRating span.chosen { 
    background-position: 0 0; 
} 

.starRating:hover span { 
background-position: -24px 0; 
transform: rotate(-15deg) scale(1.3); 
} 

.starRating:hover span.hoverChosen { 
background-position: 0 0; 
transform: rotate(-15deg) scale(1.3); 
    } 

    function StarViewModel() { 
    self.starpoints= ko.observable(); 

    self.selectStar=function(){ 
    window.location.href="view1" 
    //here i get selected star value 
     starValue=self.starpoints() 

     //here i am using ajax to post star value 
      $.ajax({ 
       type: "POST", 
       dataType: "json", 
       data: Model, 
       url: serverUrl + 'xxx/xx/xx', 
       success: function (data) { 
        $('#loading-image').hide(); 
        // after susccees of post success ajax data consist of star rating value 
        self.starpoints= ko.observable(data); 
       }, 
     } 
    } 

    $(document).ready(function() { 
    ko.bindingHandlers.readonlyStarRating = 
{ 
init: function (element, valueAccessor) { 
$(element).addClass("readonlyStarRating"); 
for (var i = 0; i < 5; i++) 
$("<span>").appendTo(element); 
     $("span", element).each(function (index) { 
     var observable = valueAccessor(); 
     $(this).hover(
      function() { 
$(this).prevAll().add(this).addClass("hoverChosen") }, 
      function() { 
$(this).prevAll().add(this).removeClass("hoverChosen") } 
     ) 
     }); 
    }, 
    update: function (element, valueAccessor) { 
    var observable = valueAccessor(); 
    $("span", element).each(function (index) { 
    $(this).toggleClass("chosen", index < observable()); 
    }); 
    } 
    } 
    ViewModel = new StarViewModel(); 
    ko.applyBindings(ViewModel); 
    }); 
+0

Le code de mise à jour semble correct. Je pense que le problème est ailleurs. –

+0

Voici un jsFiddle. La partie mise à jour de la liaison fonctionne comme prévu. https://jsfiddle.net/jlspake/9do8aoeb/ –

+0

@ merci pour votre temps, mais il n'a pas fonctionné pour moi, j'ai 2 vues, en 1ère vue, j'ai des gestionnaires de liaison et en deuxième vue, j'ai

, à la première fois il frappe la fonction de mise à jour, mais après avoir sélectionné la note de départ, je suis redirigé vers la première vue, après la deuxième vue, mise à jour ne sera pas appelée lorsque je clique sur l'incrément ou décrément, je ne sais pas pourquoi la mise à jour ne fonctionne pas seconde fois –

Répondre

0

De votre jsFiddle, dans votre fonction okay():

self.okay = function() 
{ 
    data = self.UserFeedpoint 
    self.UserFeedpoints = ko.observable(data); 
    window.location.href = "#home1" 
} 

Vous écrasez l'observable que l'interface est liée à une nouvelle observable. Vous avez juste besoin de le changer pour mettre à jour l'observable existant à la place. comme:

self.okay = function() 
{ 
    data = self.UserFeedpoint 
    self.UserFeedpoints(data); 
    window.location.href = "#home1" 
} 
+0

son fonctionnement mais, je suis incapable d'effacer les self.UserFeedpoints (données); valeur –

+0

@ merci son finalement travaillé, merci pour votre temps –

+0

pouvez-vous s'il vous plaît m'aider avec une de mes autres questions "http://stackoverflow.com/questions/43179984/how-to-carry-the-data-from-one -viewmodel-to-another-viewmodel-knockout-js " –