Ben özelliklere göre bir "ürün" seçim yapmak niyetiyle, nakavt seçer bağlıydı yapmaya çalışıyorumknockout.js bağımlı değişken örneğin bir ürünün için,
[altındaki güncellemelerini bakınız] seçer "boyut" ve "malzeme" olabilir, "boyut" seçtiysem, bir nakavt betiği arka tarafa bir istek yapar ve seçili boyut için hangi "malzeme" nin kullanılabilir olduğunu, başka bir deyişle bir özellik seçildiyse, diğer öznitelikleri sadece mevcut değerleri göstermek için filtrelenir ("tüm boyutlar": 1,2,3,4,5; "alüminyum": 1,4).
Özellikler listesi tamamen dinamiktir, ürünlere isteğe bağlı olarak bağlanabilecek yaklaşık 80 özellik vardır.
Bu durum için "en iyi uygulamalar" var mı?
Henüz başarılı olamadı, böyle koduyla çözmeye çalışıyorum:
var ViewModel = function(data) {
var self = this;
self.data = data;
self.attributes = ko.observableArray();
self.data.forEach(function(item, i, a) {
// I passed .self to catch it later
// in products as view_model.attributes().
self.attributes.push(new VariableProduct(item, self));
})
};
var VariableProduct = function(item, view_model) {
var self = this;
self.attribute_name = ko.observable(item.name);
self.attribute_value = ko.observable('--');
// list of attribute values
self.attribute_values = ko.computed(function() {
var result = {};
view_model.attributes().forEach(function(attribute, i, a) {
// here I try to filter each attributes lists by values
// it doesn't work well
if (attribute.attribute_name() != self.attribute_name() && self.attribute_value() != '--') {
result = attribute.attribute_values().filter(
function(value) {
return value.indexOf(self.attribute_value()) >= 0;
});
}
});
return result;
});
};
GÜNCELLEME 1:) (ko.subscribe için Dnyanesh en atıfla i bu sonuçları achived ettik değilmi 't Tamam henüz değil ama bir ilerleme:
http://jsfiddle.net/xwild/65eq14p3/
GÜNCELLEME 2: o solv oldu sonunda knockout.reactor ve knockout.mapping eklentileri ile ed. Detaylar ve cevap ile birlikte
Related stackoverflow question. bağımlı İçin
İlginç bir soru, bunun tersi de işe yaramalı mı? Örneğin, malzemeyi seçerseniz, yalnızca kullanılabilir boyutlar boyut açılır menüsünde filtrelenmelidir? Ya da hepsi 1 açılana (boyutlara) bağlı "öznitelikleri" dir .. başka bir deyişle: "boyutlar" tek bağımsız değişken, ve diğerleri bağımlı ya da tüm öznitelikleri birbirine bağımlı mıdır? – Tyblitz
Evet, her ürün için yaklaşık 10-15 filtre yerleştirilir ve diğer seçimler değiştirildiğinde her seçim tepki vermelidir. – xwild
Gerçek koddan bahsetmeden, tasarım hakkında tam olarak düşünmenin yararlı olabileceğini düşünüyorum. Çıktınızın http://us.acer.com/ac/en/US/content/models/laptops gibi bir şey olması gerektiğini varsayalım (devam edin ve bazı kutuları kontrol edin); ve seçilemediğinde seçenekleri tamamen çıkarmanın akıllıca olduğunu düşünmüyorum. Daha ziyade, ziyaretçiye, kararının onay kutularını devre dışı bırakarak/onları vurarak (bağlantıya bakın) kararını sınırlandırdığını açıkça belirtin. Kısacası, 'select' – Tyblitz