Javascript js因变量选择
[请参见底部的更新] 我正在尝试进行敲除依赖选择,它旨在通过这些属性进行“产品”选择,例如,产品可以有“大小”和“材质”,如果我选择了“大小”,则敲除脚本向后端发出请求,并检索可用于所选大小的“材质”,换句话说,如果选择了属性,过滤掉其他属性以仅显示可用值(“所有尺寸”:1,2,3,4,5;“铝”:1,4) 属性列表是完全动态的,大约有80个属性可以以任意方式链接到产品 对于这种情况有什么“最佳实践”吗 我正试图用这样的代码来解决它,但还没有成功:Javascript js因变量选择,javascript,knockout.js,Javascript,Knockout.js,[请参见底部的更新] 我正在尝试进行敲除依赖选择,它旨在通过这些属性进行“产品”选择,例如,产品可以有“大小”和“材质”,如果我选择了“大小”,则敲除脚本向后端发出请求,并检索可用于所选大小的“材质”,换句话说,如果选择了属性,过滤掉其他属性以仅显示可用值(“所有尺寸”:1,2,3,4,5;“铝”:1,4) 属性列表是完全动态的,大约有80个属性可以以任意方式链接到产品 对于这种情况有什么“最佳实践”吗 我正试图用这样的代码来解决它,但还没有成功: var ViewModel = functio
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;
});
};
更新1:
通过Dnyanesh对ko.subscribe()的引用,我已经获得了这些结果,现在还不确定,但有了进展:
更新2:
最后用和插件解决了这个问题
详细信息和答案。对于从属选择,我认为您可以按以下方式使用订阅
var-vm={
尺码:ko.Array([
{name:'size 1',id:1},
{name:'size 2',id:2},
{name:'size 3',id:3},
{name:'size 4',id:4}
]),
所选尺寸:可观察的ko(0),
};
vm.selectedSize.subscribe(函数(newValue)){
警报('所选大小为-->'+新值)
//此时,调用ajax或后端方法并绑定即将形成的值
});
ko.应用绑定(vm)代码>
有趣的问题,它是否也需要工作,反之亦然?例如,如果选择材质,则在“大小”下拉列表中仅过滤可用大小?或者所有“属性”都链接到一个下拉列表(大小)。。换句话说:“大小”是唯一的独立变量,所有其他变量都是依赖的还是所有属性都是相互依赖的?是的,每个产品放置了大约10-15个过滤器,每个选择都应该在其他选择发生变化时作出反应。不必说实际的代码,我认为彻底考虑设计可能是有用的。我认为您的输出应该是(继续并选中一些框);我不认为完全忽略不可选择的选项是明智的。相反,要让访问者清楚,他的决定通过禁用复选框/勾选复选框来限制他的选择(参见链接)。简言之,我认为你最好使用收音机
或复选框
而不是选择
我的空间太小了,实际上选择放在产品的分区中,每行有4个产品。现在我正试图用ko.mapping解决它,但也没有成功,更新它时订阅丢失:/it’看起来像我需要的,我将尝试制作一个示例并在这里发布。这样会更好,以便我可以了解确切的问题,并根据示例帮助您。这里的一些结果还不确定,现在需要选择所有其他选择中的第一个匹配项,并避免再次出现效果。我不知道还需要做什么。您希望避免哪些reccurent影响?每个选择都必须更新所有选择,并且当其他选择更新时,后端会出现递归和无限请求计数(我不能说“在更新代码中的值时不要使用订阅”)。