2013-09-19 2 views
0

Я просто ищу быстрый ответ, так как я не могу решить его прямо сейчас.ko.observable обновляется через функцию

Я хочу обновить наблюдаемое в зависимости от значений других других наблюдаемых через функцию, которая управляет зависимыми наблюдаемыми.

Предположим, у меня есть объект, содержащий 2 поля. 1 из них также является объектом, второй - наблюдаемым, который я хочу обновить.

function Control(elem) { 
var self = this; 
self.element = element; 
self.calc = ko.observable(); 
} 

Тогда у меня есть функция, которая делает что-то рассматривает элемента и придумывает значение.

function Control(elem) { 
var self = this; 
self.element = element; 
self.calc = ko.observable('10'); 
self.doSomething = function() { 
    var dummy = 0; 
    if (self.element.number() === 1) 
     dummy = self.element.value + 10; 
    else 
     dummy = self.element.value + '+ 10'; 
    return dummy; 
    } 
} 

Как я могу обновить известково с результатом, возвращаемой функцией, каждый раз, когда один из числа или значения приличий элемента изменяется?

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

JsFiddle: http://jsfiddle.net/razvangl/cf3kB/

+0

Знаете ли вы о вычисленных наблюдаемых? http://knockoutjs.com/documentation/computedObservables.html Вы записываете обработчики для операций 'read' и' write' и изменяете все, что вам нужно внутри. –

+0

, если у вас есть наблюдаемые, вы можете подписаться на изменения с помощью пользовательской функции, проверьте http://knockoutjs.com/documentation/observables.html#explicitly_subscribing_to_observables –

+3

@razvan, я заметил, что ваша скрипка на самом деле не работает. В нем есть несколько ошибок. Я не работал с Knockout довольно давно, поэтому я забыл, как исправить привязку к шаблону, но остальное должно быть достаточно легко исправить. – jonhopkins

ответ

0

Ok. Я решил это. Я только что сделал calc вычисленный наблюдаемый, который равен функции doSomething.

function Control(elem) { 
var self = this; 
self.element = elem; 
self.calc = ko.computed(function() { 
    var dummy = 0; 
    if (self.element.number() === 1) 
     dummy = self.element.value + 10; 
    else 
     dummy = self.element.value + '+ 10'; 
    return dummy; 
    }); 
} 
Смежные вопросы