【发布时间】:2016-12-13 17:32:25
【问题描述】:
我知道将 jQuery 事件处理程序与 Knockout 一起使用是不好的做法,但目前我想继续我开始的这条道路。正如我在this Fiddle 中所阐述的那样,我正在寻找关于如何使用 jQuery 中的 click 事件来使用 observables 更新视图模型的说明。
预期的行为是:单击颜色按钮(即Red, Green, Blue),然后单击UPDATE! 以显示相应颜色的数据。例如,点击红色 -> 更新会在 DOM 中吐出“红花太阳”。然后点击蓝色->更新会产生“蓝天海洋”。
我认为问题出在我的 observables 和 with: colors 数据绑定上,但我不完全明白为什么。对我来说,这基本上是为期 2 天的 Knockout 速成课程,我觉得其中的很多内容应该比以前容易得多。
请给我看灯!
HTML
<div data-bind="with: colors">
<h4 data-bind="text: name"></h4>
<div data-bind="foreach: things">
<span data-bind="text: $data" />
</div>
</div>
JavaScript
function Sample(data) {
var self = this;
self.colors = ko.observableArray();
self.currentColor = ko.observable();
ko.mapping.fromJS(data, {}, self);
}
var sample = new Sample({
"colors": [{
"name": "red",
"things": ["flower", "sun"]
}, {
"name": "green",
"things": ["tree", "money"]
}, {
"name": "blue",
"things": ["sky", "ocean"]
}]
});
ko.applyBindings(sample);
var clicked;
$("button").on("click", function() {
clicked = this.className;
});
$(".update").on("click", function() {
if (clicked === "red") {
// ???
}
if (clicked === "green") {
// ???
}
if (clicked === "blue") {
// ???
}
});
【问题讨论】:
标签: javascript jquery arrays json knockout.js