2015-11-03 3 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 
} 

А вот ViewModel я использую:

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, к сожалению, этот элемент исходит из параметра, который, как представляется, не наблюдается (в отличие от объявленного выше элемента, из которого все элементы наблюдаемы.) – Maleki

+0

Что не работает? Перерисовывание вашего представления, когда значение изменяется? – msolvaag

ответ

0

"minimumPremium" можно было бы наблюдать

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

Ваш zitem наблюдается, так что попробуйте это:

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

В реальном приложении не забудьте проверить значение zitem() вызова - это может быть неинициализированным.

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