Я пытаюсь установить переменную, которая будет зависеть от двух других, но я не хочу, чтобы переменная, вычисляемая , реагировала на инициализацию одного из этих варов.Как вычислить переменные после его инициализации
var viewModel = function() {
var self = this;
self.first = ko.observable("");
self.second = ko.observable();
self.doSmth = function() {
self.second(self.second() + 1);
};
self.init = function(o){
self.second(o);
};
self.comp = ko.computed(function(){
self.first();
self.second();
alert(self.second());
});
};
var vm = new viewModel();
ko.applyBindings(vm);
vm.init(111);
сообщение оповещения должно появиться только тогда, когда я нажимаю на кнопку и зависимой переменной значение было изменено. И никаких сообщений с 'undefined' и значением init '111'. Есть ли встроенное решение? Благодарю.
Вы можете использовать опцию '{deferEvaluation: true}' для вашего вычисленного и явного вызова в 'doSmth'http: //jsfiddle.net/bWLXh/. Но ваш дизайн очень странный: вы не используете вычисленное значение в любом месте, кажется, вы только хотите воспользоваться преимуществами автоматической переоценки ... можете ли вы подробнее рассказать о своем случае использования и написать немного больше, что вы пытаетесь достичь? – nemesv
Хорошее решение, но ему нужно вызывать вычисляемый метод, явно указывая его на каждое место. Я хочу этого избежать. И вы правы, мне не нужно вычислять ценность. Я просто хочу одно место в коде, где я могу обрабатывать изменения какой-либо переменной (более двух, конечно). –
Если вам не нужно вычислять, то не используйте вычисляемые :) просто вручную «подписаться» на зависимые свойства, и вы можете сделать это в init: http://jsfiddle.net/v2j2k/ – nemesv