2013-03-13 4 views
0

Я использую Knockout.js для разработки калькулятора. Я столкнулся с ситуацией, в которой я не знаю, как обращаться. В приведенном ниже примере все работает нормально, когда пользователь вводит продукт и значение, а значения сохраняются в БД. Но когда пользователь приходит к редактированию этой страницы, мое требование состоит в том, чтобы показать все значения, введенные пользователем вместе с итогами. Но когда пользователь меняет что-то в продукте или количестве, общее количество должно измениться, как ожидалось.Knockout.js вычисляется

Теперь мы сохраняем общее количество в БД и общее количество может быть изменено некоторыми пользователями-администраторами. В этом случае мы можем переопределить вычисленное значение, когда пользователь переходит на страницу редактирования, но когда пользователь меняет продукт или количества, то вычисление должно происходить с последними значениями из продукта и количества.

Справка приветствуется.

var TsFoundationDeviceModel = function(product,qty) { 
var self = this; 
self.product = ko.observable(); 
self.quantity= ko.observable(); 
self.computedExample = ko.computed(function() { 
    return self.product() * self.quantity() ; 
});} 

Мой HTML код выглядит

<input name="product" data-bind="value:product"> 
<input name="value" data-bind="value:value"> 
<input name="total" data-bind="value:computedExample"/> 
+0

Когда вы загружаете страницу редактирования, можете ли вы использовать javascript или jQuery для назначения общего? Затем, когда вы вносите изменения, обычный AppViewModel() обновит общее количество по мере необходимости? – tymeJV

+0

Но моя модель будет массивом значений, может быть 20 .. с скриптом будет жестким. –

+0

Вы нашли решение для этого? Я также борюсь с той же проблемой. – praveen

ответ

0

Вы должны связать вид на экране. Проверьте эту скрипку и дать ему

var TsFoundationDeviceModel = function(product,qty) { 
var self = this; 
self.product = ko.observable(product); 
self.quantity= ko.observable(qty); 
self.computedExample = ko.computed(function() { 
return self.product() * self.quantity() ; 
});} 

ko.applyBindings(new TsFoundationDeviceModel(2,3)); 

http://jsfiddle.net/Z6VPV/5/

+0

Есть ли способ, которым я могу просто показать вычисленное значение прямо из БД. Иногда вычисляемое значение изменяется в БД от третьего лица. –

+0

вам придется настроить повторный вызов ajax, который обновляет объект. – Darussian

+0

есть способ, которым я могу переопределить вычисленное значение со значением, которое я получаю от БД. –

0

При ссылке наблюдаемыми в пределах вашего вычислен вы должны рассматривать их как функции, так вместо return self.product * self.quantity ; вы бы использовать return self.product() * self.quantity();

Fiddle: http://jsfiddle.net/SAV9A/

+0

Oops.The код отредактирован now.but в этом случае, я хочу показать данные, поступающие из БД, когда пользователь приходит, чтобы редактировать страницу. Иногда общее количество в DB изменяется сторонним API. –

+1

Вам нужно написать вызов ajax для извлечения данных из базы данных и сохранить это значение в наблюдаемом. Если в коде есть точки, в которых вы считаете, что данные могут быть устаревшими (изменены в db через api), вы обновите данные тем же методом ajax, который использовался для извлечения значения для инициализации. – jarmie

+0

есть способ, которым я могу переопределить вычисленное значение со значением, которое я получаю от БД. –

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