【发布时间】:2016-02-04 04:23:08
【问题描述】:
我在这里使用 durandal/requirejs/knockout。 我也在使用 coderenaissance 插件进行映射 (ko.viewmodel.updateFromModel(ziitem, data)。)
我从我的 ajax 调用中获取以下数据,并将其映射到我的 zitem observable 中。
{
"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]?
【问题讨论】:
-
可能是 ... zitem.minimumPremium(thisItem.minimumPremium() + 1); ... minimumPremium 将是可观察的。
-
什么不起作用?当值改变时,你的视图重绘?
-
@Sam.C 不幸的是 thisItem 来自似乎不可观察的参数(与上面声明的所有项目都是可观察的 ziitem 相反。)
-
我指的是“minimumPremium”作为一个可观察的而不是“thisItem”。它应该是一个可观察的,否则 ziitem.minimumPremium( ... 将首先不起作用,如果不是这种情况,它应该在这一点上给你一个 javascript 错误)。在同一行中,您在应该是“thisItem.minimumPremium() + 1”的地方添加“1”(thisItem.minimumPremium + 1)。
-
回顾你的问题,它需要一点澄清,我已经在这个 jsfiddle "jsfiddle.net/5oLtz0xa/9" 中从你的标记中破解了一个工作代码......查看脚本并添加一些澄清如果可以的话,回答你的问题