- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我读过一些关于基本 JavaScript 的其他问题,我知道要让一个变量在两个函数之间可用,您需要执行返回或使变量成为全局变量(在函数之外)。
但我认为 knockout 中的解决方案可能更简单(或者,我的代码的整个结构完全不对,我可以让它变得更好)。
基本上,这是我想要完成的:
<h4 data-bind="text: displayTheValue">The value should be displayed here</h4>
<select data-bind="options: htmlSelectSet, optionsText: 'theText', optionsValue: 'theValue', value: displayTheValue"></select>
<p><span data-bind:"text: charSymbol">I want to display a character here that is dependent on the choices of the dropdown above</span></p>
我有依赖 Knockout 生成内容的 HTML 模板。这是 JS:
function thisViewModel() {
var self = this;
var num1 = numeral(35450).format('0,0'); //variables probably set by input?
var num2 = numeral(2450).format('0,0');
self.htmlSelectSet = [{
theText: "alpha",
theValue: num1
}, {
theText: "bravo",
theValue: num2
}];
self.displayTheValue = ko.observable();
}
ko.applyBindings(new thisViewModel());
到目前为止,我所取得的成就是用项目填充下拉菜单,drdop down 的值显示在 to
<h4 data-bind="text: displayTheValue">
在漂亮的 numeralsJS 库的帮助下,它被正确地格式化为逗号数字(Yay)。
现在,我想要实现的是,当用户在下拉菜单中选择 alpha 时,
<span data-bind:"text: charSymbol"></span>
上面会输出“A”。
我是否为此创建另一个函数,该函数取决于 theText 值?
我这样做了:
function setChar() {
var self = this;
if (thisViewModel().theText == "alpha") {
showSymbol = "A";
}
if (thisViewModel().theText == "bravo") {
showSymbol = "B";
}
else {
currencySymbol = null;
}
self.showSymbol = ko.observable();
}
ko.applyBindings(new setChar());
只是想做一个调用 thisViewModel().theText 的函数会做一些事情,但目前还行不通。
我将不胜感激任何提示。我不认为这太复杂了,但它让我感到头疼。
我也会欣赏有关如何构建和处理问题的提示(即使用多个函数更好,还是简单地将所有内容都放在一个函数中?)
(供引用:我的 JavaScript 技能是新手;很奇怪 - 为什么我要使用像 Knockout 这样的库,平均而言,我所知道的 JS 中最好的事情是输出“Hello Word”字符串字符数?我不知道,可能只是勇敢 :D 我上一次非常擅长的编程语言是在 Turbo C 中。但我会学习的!)
谢谢!
最佳答案
你可以使用一个computed observable
。不需要有两个 View 模型。
What if you’ve got an observable for firstName, and another for lastName, and you want to display the full name? That’s where computed observables come in - these are functions that are dependent on one or more other observables, and will automatically update whenever any of these dependencies change.
http://knockoutjs.com/documentation/computedObservables.html
首先通过删除 optionsValue: 'theValue'
更改您的值绑定(bind)以将对象设置为 displayTheValue 而不仅仅是值。
由于对象现在可以是未定义的,我们需要对文本绑定(bind)进行一些保护。如果它是未定义的,我们将把文本设置为空字符串。我们也可以使用 with改为绑定(bind):
<h4 data-bind="text: displayTheValue() ? displayTheValue().theValue : ''"></h4>
然后在使用 :
而不是 =
:
<span data-bind="text: charSymbol"></span>
现在进行计算。当 displayTheValue 时,计算函数将触发并返回相关值:
self.charSymbol = ko.computed(function () {
if (self.displayTheValue()) {
if (self.displayTheValue().theText == "alpha") {
return "A";
}
if (self.displayTheValue().theText == "bravo") {
return "B";
}
}
return null;
});
关于javascript - 从 KnockoutJS viewModel 获取值然后在另一个 viewModel 上调用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27812956/
这个问题在这里已经有了答案: final keyword in method parameters [duplicate] (9 个回答) 关闭 8 年前。 在此示例中,声明 Object fina
我的目标:是通过我的函数更新字段获取选定值并使用函数输出值运行它。 问题:当我从列表中选择值时,它不会触发函数,也不会更新字段。 感谢您的帮助。 HTML 12 14 16 18 20 22 24
我有一本具有这种形式的字典: myDict = {'foo': bar, 'foobar baz': qux} 现在,我想拆分字典键中的空格,使其成为下一个键并获取值(重复)。 myDictRev1
vector a; vector b; int temp_holder; cout > temp_holder) a.push_back(temp_holder); cout > temp_h
Java 的开发过程中免不了与 Date 类型纠缠,准备总结一下项目经常使用的日期相关操作,JDK 版本 1.7,如果能够帮助大家节约那么几分钟起身活动一下,去泡杯咖啡,便是极好的,嘿嘿。当然,我
我正在使用 jquery ui 日期选择器来获取 fromDate 和 toDate 以下是from日期的代码 $("#from_date").datepicker({
我是一名优秀的程序员,十分优秀!