在 Select 脚本中调用 Knockout 计算 Var 时如何定义它?
How do you define a Knockout computed Var when you call it inside a Select script?
我这里有一个 JavaScript with KnockOut JS:
正如你在JS脚本上看到的,有一个Select self.langSet
然后由三个 ko.computed 函数使用:i1Txt
、i2Txt
、i3Txt
然后是另一个下拉列表 self.selectionSet
,其中 theDropTxt
值必须分别采用 i[1-3]Txt
。
我的问题:
我知道在我可以使用 i1Txt()
、i2Txt()
、i3Txt()
之前——我需要让它们验证它们的定义就像
if (self.setLang()) {
if (self.setLang().langTxt == "English") {
return "Two Fifty";
}
if (self.setLang().langTxt == "Français") {
return "Deux cent cinquante";
}
}
return null;
其中 self.setLang()
在使用 self.setLang().langTxt
之前根据定义进行验证。
我试过这样做:
if (i1Txt() && i2Txt() && i3Txt()) {
self.selectionSet = [{
theDropTxt: i1Txt(),
theDropVal: selVal1
}, {
theDropTxt: i2Txt(),
theDropVal: selVal2
}, {
theDropTxt: i3Txt(),
theDropVal: selVal3
}];
}
self.setDrops = ko.observable();
(笑)
但这全错了。我该怎么做才正确?
您的 self.selectionSet
也可能被 计算:
self.selectionSet = ko.computed(function(){
return [{
theDropTxt: self.i1Txt(),
theDropVal: selVal1
}, {
theDropTxt: self.i2Txt(),
theDropVal: selVal2
}, {
theDropTxt: self.i3Txt(),
theDropVal: selVal3
}];
});
这是你想要得到的吗? http://jsfiddle.net/pvd6xLjL/2/
我建议从不同的方法来解决问题。值来自语言:当您可以更紧密地耦合语言和值时,为什么还要创建计算字段?
http://jsfiddle.net/Quango/m80L37y8/
首先,我为每种语言添加了一个 values
属性,数组中包含您想要的文本:
self.langSet = [{
langTxt: "English",
langVal: langVal1,
values: [{
theDropTxt: "Three Twenty",
theDropVal: selVal1
}, {
theDropTxt: "Four Eighty",
theDropVal: selVal2
}, {
theDropTxt: "Two Fifty",
theDropVal: selVal3
}]
}, {
langTxt: "Français",
langVal: langVal2,
values: [{
theDropTxt: "Trois-cent Vingt",
theDropVal: selVal1
}, {
theDropTxt: "Quatre cent quatre-vingt",
theDropVal: selVal2
}, {
theDropTxt: "Deux cent cinquante",
theDropVal: selVal3
}]
}];
我将 selectionSet
更改为 observableArray
self.selectionSet = ko.observableArray([]);
最后我向 setLang observable 添加了一个 .subscribe
这样我们就可以发现它何时发生变化:
// subscribe to changes in language and change selections
self.setLang.subscribe(function (newValue) {
// change the array
self.selectionSet(newValue.values);
});
当更改 setLang 时,这会触发订阅。然后,这会将第二个下拉源更改为使用新语言。我认为这是使用计算值的更简洁的解决方案。
我这里有一个 JavaScript with KnockOut JS:
正如你在JS脚本上看到的,有一个Select self.langSet
然后由三个 ko.computed 函数使用:i1Txt
、i2Txt
、i3Txt
然后是另一个下拉列表 self.selectionSet
,其中 theDropTxt
值必须分别采用 i[1-3]Txt
。
我的问题:
我知道在我可以使用 i1Txt()
、i2Txt()
、i3Txt()
之前——我需要让它们验证它们的定义就像
if (self.setLang()) {
if (self.setLang().langTxt == "English") {
return "Two Fifty";
}
if (self.setLang().langTxt == "Français") {
return "Deux cent cinquante";
}
}
return null;
其中 self.setLang()
在使用 self.setLang().langTxt
之前根据定义进行验证。
我试过这样做:
if (i1Txt() && i2Txt() && i3Txt()) {
self.selectionSet = [{
theDropTxt: i1Txt(),
theDropVal: selVal1
}, {
theDropTxt: i2Txt(),
theDropVal: selVal2
}, {
theDropTxt: i3Txt(),
theDropVal: selVal3
}];
}
self.setDrops = ko.observable();
(笑)
但这全错了。我该怎么做才正确?
您的 self.selectionSet
也可能被 计算:
self.selectionSet = ko.computed(function(){
return [{
theDropTxt: self.i1Txt(),
theDropVal: selVal1
}, {
theDropTxt: self.i2Txt(),
theDropVal: selVal2
}, {
theDropTxt: self.i3Txt(),
theDropVal: selVal3
}];
});
这是你想要得到的吗? http://jsfiddle.net/pvd6xLjL/2/
我建议从不同的方法来解决问题。值来自语言:当您可以更紧密地耦合语言和值时,为什么还要创建计算字段?
http://jsfiddle.net/Quango/m80L37y8/
首先,我为每种语言添加了一个 values
属性,数组中包含您想要的文本:
self.langSet = [{
langTxt: "English",
langVal: langVal1,
values: [{
theDropTxt: "Three Twenty",
theDropVal: selVal1
}, {
theDropTxt: "Four Eighty",
theDropVal: selVal2
}, {
theDropTxt: "Two Fifty",
theDropVal: selVal3
}]
}, {
langTxt: "Français",
langVal: langVal2,
values: [{
theDropTxt: "Trois-cent Vingt",
theDropVal: selVal1
}, {
theDropTxt: "Quatre cent quatre-vingt",
theDropVal: selVal2
}, {
theDropTxt: "Deux cent cinquante",
theDropVal: selVal3
}]
}];
我将 selectionSet
更改为 observableArray
self.selectionSet = ko.observableArray([]);
最后我向 setLang observable 添加了一个 .subscribe
这样我们就可以发现它何时发生变化:
// subscribe to changes in language and change selections
self.setLang.subscribe(function (newValue) {
// change the array
self.selectionSet(newValue.values);
});
当更改 setLang 时,这会触发订阅。然后,这会将第二个下拉源更改为使用新语言。我认为这是使用计算值的更简洁的解决方案。