以我的ViewModel,main.PlansOptions是计划正被正确地与3个计划对象初始化一个数组。当用户点击一个按钮时,我想复制所选计划的参考文件到main.SelectedPlan observable。复制对象引用另一个可观察到的
的问题是,在ChoosePlan功能,之后我复制到selectedplan main.SelectedPlan,计划对象的布尔值(UnlimitedFences和ShowAdvertisings)失去了原有的值(从假为真)。
我试图让main.SelectedPlan计算出来,并得到一个名为main.SelectedPlanIndex的索引的选定计划,但同样的错误发生。我相信如何将一个对象(具有可观察属性)复制到另一个可观察对象上有一个正确的方法。
任何帮助,将不胜感激
计划的定义
function Plan(id, name, monitors, commands, historydays, unlimitedfences, supporttype, showadvertisings) {
var o = this;
o.PlanId = ko.observable(id);
o.Name = ko.observable(name);
o.Monitors = ko.observable(monitors);
o.Commands = ko.observable(commands);
o.HistoryDays = ko.observable(historydays);
o.UnlimitedFences = ko.observable(unlimitedfences); // boolean
o.SupportType = ko.observable(supporttype);
o.ShowAdvertisings = ko.observable(showadvertisings); // boolean
};
视图模型
function PurchasePlanViewModel() {
var main = this;
main.PlansOptions = ko.observableArray([]);
main.SelectedPlanIndex = ko.observable(-1);
main.SelectedPlan = ko.observable();
...
// Sub View Model (inside of PurchasePlanViewModel)
main.SelectPlan = new function() {
var o = this;
o.ChoosePlan = function (selectedplan) {
// the problem occurs here -- booleans of selectedplan are set to true
main.SelectedPlan(selectedplan);
}
...
}
HTML
<section class="select-plan" data-bind="with: SelectPlan, visible: ShowSelectPlan">
<div class="plans-options hidden-xs clearfix" data-bind="foreach: $root.PlansOptions">
<div class="plan-option col-sm-4" data-bind="css: { selected : $root.SelectedPlan() ? PlanId() == $root.SelectedPlan().PlanId() : false }">
<h4 class="plan-title" data-bind="text: Name"></h4>
<div class="plan-info">
<div class="vehicular-price">
<span class="price" data-bind="text: VehicularTrackerUnitCost.AsCurrency()"></span>
...
<div class="purchase">
<button class="btn btn-block btn-success" data-bind="click: $parent.ChoosePlan" style="margin-top: 10px;">Quero o <span data-bind="text: Name"></span></button>
</div>
</div><!-- end of plan-info -->
</div><!-- end of plan-option -->
</div><!-- end of plans-options -->
您可以创建带有问题的简单JSFiddle演示吗? – Ilya 2014-09-15 12:47:40
“PlansOptions”中的原始“计划”是否也发生了变化? – haim770 2014-09-15 12:55:55
是的,当o.ChoosePlan被调用并且main.SelectedPlan()被selectplan初始化时,UnlimitedFences和ShowAdvertisings(的selectedplan)的值将在PlansOptions()可观察数组中从false更改为true – 2014-09-15 13:01:58