0

我的桌子外面有一个文本框,正在创建淘汰赛。我想让用户更新该字段,然后更新表中的数据。我创建了以下小提琴,显示了我正在尝试做的事情。

我用过

self.final = ko.computed(function() {
return (self.sales() + $("#increase").val() * self.multiplier();
});  

但它似乎不会导致表更新。

小提琴http://jsfiddle.net/Rarewood/SdL87/5/

我正在尝试使用这个简单的答案来回答我更复杂的问题。我正在使用 json 数据源。

        self.getCalcData = function (mypath,index) {
            self.calcList.removeAll();
            $.getJSON(mypath, function (allData) {
                var mappedLogs = $.map(allData, function (item) { return new CalcList(item) });
                self.calcList(mappedLogs);
            });
        };

有了这个数据功能

function CalcList(data) {
        var self = this;
        self.category = ko.observable(data.CATEGORY);
        self.sales = ko.observable(data.SALES);
        self.growthinput = ko.observable();
};

和视图模型

function LogEntryViewModel() {
        var self = this; 
        self.calcList = ko.observableArray([]);
        self.sales = ko.observable();
        self.growthinput = ko.observable();
};

我不能安静地得到第一个答案来使用它。

4

1 回答 1

0

使其工作的一种方法是让淘汰赛也为您的文本框进行绑定。

在你的上创建一个新的 observable 属性viewmodel

self.increase = ko.observable(200);

并将其绑定在您的视图中:

<input id="increase" type="text" data-bind="value: increase"/>

然后将此属性传递给您的Category对象:

new Category(self.increase,  "shoes" , 200,  .1 )

然后您可以increase在计算中使用:

self.final = ko.computed(function() {
      return self.sales() *  increase() * self.multiplier(); 
    });

请参阅演示小提琴。

于 2012-11-14T16:38:58.733 回答