【发布时间】:2019-10-21 14:20:29
【问题描述】:
总结:当一个方程使用的可观察值是由用户输入而不是通过另一个变量设置时,它正在改变它的输出。方程的输出也会被方程的阶数修改,但仅在用户输入值时。
我有一个如下公式:
var numMinions = Math.floor(
customDifficultySettings.mandatoryMinions() +
worker.star.distance() * customDifficultySettings.minionMod()
);
worker.star.distance() 正在从星的信息数组中提取一个值,出于本问题的目的,应将其忽略。它将返回一个整数。
通过一系列困难将小兵的值输入其中:
var difficultyInfo = [
{
// Easy
customDifficulty: false,
minionMod: 0.2,
mandatoryMinions: 1
},
// more difficulty levels
{
// Custom
customDifficulty: true,
}
稍后更新 observable 以匹配选择:
if (
!difficultyInfo[model.newGameDifficultyIndex() || 0].customDifficulty
) {
customDifficultySettings.mandatoryMinions(
difficultyInfo[model.newGameDifficultyIndex() || 0].mandatoryMinions
);
customDifficultySettings.minionMod(
difficultyInfo[model.newGameDifficultyIndex() || 0].minionMod
);
}
// Used to hide custom input fields if not the custom difficulty level
if (
difficultyInfo[model.newGameDifficultyIndex() || 0].customDifficulty
) {
customDifficultySettings.customDifficulty(true);
} else {
customDifficultySettings.customDifficulty(false);
}
这个视图模型如下:
var customDifficultySettings = {
mandatoryMinions: ko.observable(),
minionMod: ko.observable(),
如果选择了“自定义”难度,则会公开字段以允许用户通过字段更新值:
document
.getElementById("game-difficulty")
.insertAdjacentHTML(
"afterend",
'<div class="sub_options" id="custom-difficulty-settings" data-bind="visible: customDifficultySettings.customDifficulty()">' +
'<div class="form-group">' +
'<div><input type="number" style="width: 50px; padding-bottom: 0px;" data-bind="textInput: customDifficultySettings.mandatoryMinions" />' +
'<span style="margin-left: 6px;"></span><loc>Mandatory Minions</loc></label>' +
'<span class="info_tip" data-bind="tooltip: \'!LOC:Number of additional Commanders in every system.\'">?</span></div>' +
'<div><input type="number" style="width: 50px; padding-bottom: 0px;" data-bind="textInput: customDifficultySettings.minionMod" />' +
'<span style="margin-left: 6px;"></span><loc>Minion Modifer</loc></label>' +
'<span class="info_tip" data-bind="tooltip: \'!LOC:Mandatory Minions + Star Distance * Minion Modifier = number of additional enemy Commanders.\'">?</span></div>' +
"</div></div>"
);
例如,当customDifficultySettings.mandatoryMinions = 1 和customDifficultySettings.minionMod = 0 时,我期望numMinions = 1。对于从 diffInfo 数组中提取值的每个困难,这都能按预期工作。
但是,如果我选择自定义难度并在 Mandatory Minions 字段中输入数字 1,并且 Minion Modifier 为 0,那么我会得到 numMinions = 10。如果我将等式更改为:
var numMinions = Math.floor(
worker.star.distance() * customDifficultySettings.minionMod() +
customDifficultySettings.mandatoryMinions()
);
然后输入相同的值,我得到numMinions = 01。
我假设我输入的输入不正确,并且在通过字符串输入时它没有作为数字返回,但我不确定应该如何修改输入以更正此问题。
我在这方面不知所措。这是我第一次使用 Knockout.js。
【问题讨论】: