如何用程序更新可观察到的复杂淘汰赛

How can I update a complex knockout observable programatically?

本文关键字:复杂 淘汰赛 观察 何用 程序 更新      更新时间:2023-09-26

我在这里使用durandal/requirejs/敲除。我还在使用代码复兴插件进行映射(ko.viewmodel.updateFromModel(zitem,data)。)

我从ajax调用中获得以下数据,并将这些数据映射到我的zitemobservable中。

{
    "itemNumber" : "ABATAH000",
    "effectiveDate" : "2015-11-03T15:30:05.7118023-05:00",
    "expiryDate" : "2015-05-03T15:30:05.7118023-04:00",
    "minimumPremium" : 25,
    "zSubItems" : [{
            "zSubItemName" : "Mine",
            "unitDistance" : 100000,
            "zSubSubItems" : [{
                    "zSubSubItemName" : "CoverageA",
                    "zSubSubItemPremium" : 100.0,
                    "id" : 0
                }
            ],
            "id" : 1
        }
    ],
    "id" : 0
}

这是我正在使用的视图模型:

define(['plugins/http', 'durandal/app', 'knockout', 'services/datacontext'],
    function (http, app, ko, datacontext) {
    var zitem = ko.observable();
    var activate = function () {
        //This is just a wrapper around an ajax call.
        return datacontext.getPolicy("value")
            .then(function(data) {
                ko.viewmodel.updateFromModel(zitem, data);
            });
    };
    var updateMinimumPremium = function (thisItem) {
        //This doesn't work
        zitem.minimumPremium(thisItem.minimumPremium + 1);
    };
    return {
        displayName: 'zitem example',
        zitem: zitem,
        updateMinimumPremium: updateMinimumPremium,
        activate: activate
    };
});

我将updateMinimumPremium绑定到与minimumPremium元素级别相同的按钮上。

<button data-bind="click: $parent.updateMinimumPremium">Add 1</button>

如何以程序方式更新[minimumPremium]或[zSubSubItemPremium]?

"minimumPremium"将是可观察到的

zitem.minimumPremium(thisItem.minimumPremium() + 1);

你的zitem也是可观察的,所以试试这个:

zitem().minimumPremium(thisItem.minimumPremium + 1);

在实际应用程序中,不要忘记检查zitem()调用的值——它可以被取消初始化。