【问题标题】:Using Knockout to update the view from JSON via click event使用 Knockout 通过点击事件从 JSON 更新视图
【发布时间】:2016-12-13 06:49:44
【问题描述】:

每次触发事件(例如单击按钮)时,我都会尝试使用 Knockout 更新视图模型。单击红色按钮时,应显示“红色花朵”。单击蓝色时,应更改为“蓝天”。

基本上,我只想单击一个按钮以使用适当的数据更新视图。我觉得我很接近了。我错过了什么,我将如何使用$.getJSON 扩展此逻辑?

小提琴:

https://jsfiddle.net/ft8a6jbk/3

HTML:

<button class="red">Red</button>
<button class="blue">Blue</button>

<div data-bind="text: name"></div>
<div data-bind="text: things()[0].item1"></div>

<script>
  ko.applyBindings(viewModel);
</script>

JS:

var data = {
  "colors": [{
    "name": "blue",
    "things": [{
      "item1": "sky",
      "item2": "ocean",
    }, ]
  }, {
    "name": "red",
    "things": [{
      "item1": "flower",
      "item2": "sun",
    }, ]
  }, ]
};

$('.red').click(function() {
  var viewModel = ko.mapping.fromJS(data.colors[0]);
});

$('.blue').click(function() {
  var viewModel = ko.mapping.fromJS(data.colors[1]);
});

【问题讨论】:

  • 您能否阐明您想要做什么或修复您的 JsFiddle 示例?目前什么都没做
  • 啊,对不起,让我改写问题。给我一点时间!

标签: javascript jquery json model-view-controller knockout.js


【解决方案1】:

你可以试试:

$('.red').click(function() {
  var viewModel = ko.mapping.fromJS(data.colors[0]);
  ko.cleanNode(document);
  ko.applyBindings(viewModel);
});

$('.blue').click(function() {
  var viewModel = ko.mapping.fromJS(data.colors[1]);
  ko.cleanNode(document);
  ko.applyBindings(viewModel);
});

它有效,但不推荐使用淘汰赛。

【讨论】:

  • 谢谢。您的方法确实有效,但是如果我可能会问,推荐的方法是什么?我有兴趣正确地做到这一点。
  • 似乎您指的是可观察对象 (knockoutjs.com/documentation/observables.html),因此我只绑定一次视图。我将如何做到这一点以实现相同的目标?也许我应该开始另一个问题...
  • 一切都应该在 viewModel 以及您的点击处理程序中。例如,您的视图模型应该是这样的: var viewModel = { colors: ko.observableArray([]), selectedColor: ko.observable(), setColor: function(colorName) { /* ... */ } } ;最好不要使用 jQuery,但毕竟你的代码工作正常。
猜你喜欢
  • 1970-01-01
  • 2016-12-13
  • 1970-01-01
  • 2016-12-13
  • 2013-11-11
  • 1970-01-01
  • 2015-11-01
  • 2013-10-24
  • 1970-01-01
相关资源
最近更新 更多