jsFiddle :http://jsfiddle.net/brandondurham/g3exx/
如何在模型中的各种observableArrays之间创建关系?例如,在我的模型中,我有一个cartItems
数组,该数组中的每个项都有一个嵌套的{{1数组以及itemFreebies
属性。客户只有在购物车中订阅时才能获得免费物品(itemType
),因此,当删除该订阅时,我需要删除所有其他购物车商品的免费赠品,最好使用漂亮的fadeOut动画。
创建这些类型的条件关系的最佳方法是什么?
这是我在模型中使用的对象:
"itemType" : "subscription"
答案 0 :(得分:1)
我会从这样的事情开始:
$(function () {
var CartViewModel = {
var self = this;
self.cartItems = ko.observableArray([]);
self.eligibleForFreebies = ko.computed(function() {
return ko.utils.arrayFirst(self.cartItems(), function(cartItem) {
// I forgot the () after itemType in the original post
return (cartItem.itemType() === 'subscription');
});
// Note: ko.utils.arrayFirst will either return the item in
// question, or it will return undefined or null…
// I forget which, but either will result in
// eligibleForFreebies evaluating to false
});
};
var Product = function() {
var self = this;
self.itemName = ko.observable();
self.itemDesc = ko.observable();
self.itemType = ko.observable();
self.itemPrice = ko.observable();
self.itemFreebies = ko.observableArray([]);
};
var Freebie = function() {
var self = this;
self.freebieName = ko.observable();
self.freebieDesc = ko.observable();
self.freebieOriginalPrice = ko.observable();
}
ko.applyBindings(new CartViewModel());
// load data
});
将产品加载到CartViewModel中的cartItems observableArray。
依赖的可观察(ko.computed)值eligibleForFreebies
将决定是否允许免费赠送。
当购物车不符合条件时,您甚至不需要从产品中删除免费赠品 - 只需检查eligibleForFreebies
并在显示屏,发票等中包含或排除免费赠品(这可能会让您省去在用户添加订阅后检索免费赠品的麻烦,但我认为这取决于您的方案。)
希望这有助于您开始使用此功能,但如果您有任何疑问,请与我们联系。
更新:我forked your fiddle并重新编写了一些代码...好吧,我大部分时间都移动了它,但我确实添加了一些功能。
请注意,如果您从购物车中删除订阅商品,所有免费赠品都会从购物车显示中消失 - 但我没有从对象中删除它们!
如果添加了一个方法来重新添加订阅项到购物车,免费赠品就会重新出现。
如果有机会,请看一下,如果您希望我解释一下,请告诉我。