Javascript 在Select脚本中调用敲除计算变量时,如何定义该变量?

Javascript 在Select脚本中调用敲除计算变量时,如何定义该变量?,javascript,jquery,html,knockout.js,Javascript,Jquery,Html,Knockout.js,我这里有一个带淘汰JS的JavaScript: 正如您在JS脚本上看到的,有一个Selectself.langSet 然后由三个ko.computed函数使用:i1text,i2text,i3text 然后是另一个下拉菜单self.selectionSet,其中droptxt值必须分别采用i[1-3]Txt 我的问题: 我知道,在使用i1Text(),i2Text(),i3Text()之前,我需要验证它们的定义是否与 if (self.setLang()) { if (self

我这里有一个带淘汰JS的JavaScript:

正如您在JS脚本上看到的,有一个Select
self.langSet

然后由三个ko.computed函数使用:
i1text
i2text
i3text

然后是另一个下拉菜单
self.selectionSet
,其中
droptxt
值必须分别采用
i[1-3]Txt

我的问题: 我知道,在使用
i1Text()
i2Text()
i3Text()
之前,我需要验证它们的定义是否与

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();

(笑)


但这都错了。如何正确操作?

您的
自我选择集也可以计算:


这就是你想要的吗

我建议用不同的方法来解决这个问题。值来自于语言:当您可以更紧密地耦合语言和值时,为什么要创建计算字段

首先,我为每种语言添加了一个
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
    }]
}];
我将
选择集
更改为可观察的屏幕

self.selectionSet = ko.observableArray([]);
最后,我添加了一个
.subscribe
到setLang observable,以便我们可以发现它何时发生变化:

// subscribe to changes in language and change selections
self.setLang.subscribe(function (newValue) {
    // change the array 
    self.selectionSet(newValue.values);
});

更改setLang时,将触发订阅。然后,这会将第二个下拉源更改为使用新语言。我认为这是一个使用计算值的更简洁的解决方案。

有什么问题?你的计算观测值似乎是有效的。这是有效的,而且是一种短得多的方法,几乎没有变化。如果JS没有变得异常并说“self.i1Text()未定义”,那么如何使它成为一个计算程序呢?谢谢,确实,这是一个更干净、更短的代码,非常有用!
// subscribe to changes in language and change selections
self.setLang.subscribe(function (newValue) {
    // change the array 
    self.selectionSet(newValue.values);
});