2013-04-24 4 views
2

Это мое первое сообщение здесь, когда вы пытаетесь найти ответ Google. Если бы это было отвечено где-то раньше, если бы вы могли помочь мне направлять меня в нужное место, это было бы здорово.нокаут 2 поля, связывающие друг друга

Я пытаюсь выяснить способ сделать 2-х связывание между двумя полями.

У меня есть 2 поля на моей форме, которые выполняют расчет веса. Если вы вводите вес в фунтах в поле №1, то Нокаут рассчитает вес в килограммах в поле №2. У меня нет никаких проблем с этим один и вот мой jsfiddle для этого http://jsfiddle.net/ubiquitous_tom/tVh3g/

var weight = 180; 
self.weight = ko.observable(weight.toFixed(2)); 
self.weightKG = ko.computed(function(){ 
    var kg_weight = parseFloat(self.weight())/2.2; 
    return !isNaN(kg_weight) ? kg_weight.toFixed(2) : undefined; 
}); 

Теперь проблема у меня есть, что, когда я пытаюсь поставить вес в килограммах на 2 поля #. Он должен рассчитать вес в фунтах в поле №1, но он этого не делает. Я понятия не имею, как заставить его работать, потому что весь код, который я пытаюсь использовать вычисляемые «чтение» и «запись» в обоих полях, дает мне бесконечную ошибку цикла, поэтому я думаю, что я просто ничего не делаю правильно.

Если кто-нибудь может мне помочь, это было бы здорово. Я уверен, что это нечто очень простое, но я совершенно новичок в Knockout, и я не совсем уверен, как заставить его работать правильно. вот jsfiddle для того, я пытаюсь работать над http://jsfiddle.net/ubiquitous_tom/VmZLZ/

var weight = 180; 
self.weight = ko.observable(weight.toFixed(2)); 
self.weightKG = ko.computed({ 
    read: function() { 
     return parseFloat(self.weight().toFixed(2)); 
    }, 
    write: function(newValue) { 
     var kg_weight = parseFloat(newValue)/2.2; 
     return !isNaN(kg_weight) ? kg_weight.toFixed(2) : undefined; 
    } 
}); 

ответ

2

Вот рабочая скрипку: http://jsfiddle.net/jearles/VmZLZ/6/

Ключ должен иметь как чтение и запись в перезаписываемых вычисленной ссылаться на другой наблюдаемое поле. Когда вы читаете вычисленное значение, оно вычисляется из поля «master», а когда вы пишете на вычисленное, оно пересчитывает «основное» поле.

-

function weightModel() { 
    var self = this; 
    var weight = 180; 
    self.weight = ko.observable(weight.toFixed(2)); 
    self.weightKG = ko.computed({ 
     read: function() { 
      return !isNaN(self.weight()) ? 
       (self.weight()/2.2).toFixed(2) : undefined; 
     }, 
     write: function(newValue) { 
      var pd_weight = !isNaN(newValue) ? 
        (parseFloat(newValue) * 2.2).toFixed(2) : undefined; 
      self.weight(pd_weight); 
     } 
    }); 
} 
ko.applyBindings(new weightModel()); 
+0

Спасибо так много! Это работает отлично. Я понятия не имею, почему я никогда не думал об этом. Я думаю, я просто предполагаю, что «чтение» - это просто отображение только своего рода вещей. –

 Смежные вопросы

  • Нет связанных вопросов^_^