2015-11-03 51 views
0

我在這裏使用durandal/requirejs/knockout。 我還使用用於映射的coderenaissance插件(ko.viewmodel.updateFromModel(zitem,數據)。)如何以編程方式更新複雜的基因敲除可觀察性?

我碰到我的AJAX調用它,我映射到我的zitem觀察到以下數據。

{ 
    "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]?

+1

可以是... zitem.minimumPremium(thisItem.minimumPremium()+ 1); ... minimumPremium將是可觀察的。 –

+0

@ Sam.C不幸的是,thisItem來自似乎不可觀察的參數(與上面聲明的所有項目都是可觀察的zitem相反)。 – Maleki

+0

什麼不起作用?重新繪製視圖,當值改變時? – msolvaag

回答

0

「minimumPremium」 將是可觀察到的

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

zitem是可觀察的一樣,所以試試這個:

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

在實際應用中不要忘記檢查zitem()呼叫的價值 - 它可以是未初始化。