【问题标题】:knockoutjs make selectable items onclick within foreachknockoutjs 在 foreach 中使可选项目 onclick
【发布时间】:2015-09-04 15:42:22
【问题描述】:

我在 foreach 语句中循环项目。在页面加载时,默认情况下我选择第一项 (data-bind="css: { selected: $index() == 0 }"):

var viewModel = function(){
 var self = this;
 self.pattern_index = 0;
 self.select = function(data) {
  //handle click
 };
 self.makes = [
  {id:1, name: 'Northwoods Prestige'},
  {id:2, name: 'Forest Bay'},
  {id:3, name: 'Timberland'}
 ];
};
var model = new viewModel();
ko.applyBindings(model);

HTML:

  <div class='oTitle'><span class="label label-primary">Patterns</span></div>
  <div data-bind="foreach: makes">
      <div data-bind="css: { selected: $index() == 0 }, click: $root.select.bind($data)">xx </div>
  </div>

CSS:

.selected{background-color:red;}

我的问题是如何使其他项目可选择,选择点击的项目 (.selected) 并从第一个项目中删除可选择的类

jsfiddle:http://jsfiddle.net/diegopitt/g57qs9a7/

【问题讨论】:

  • 如果我没记错的话,你昨天发布了一个这样的问题,我回答了这个问题(检查 cmets)。欢呼
  • @supercool 似乎 OP 在问一系列非常相似的问题。 stackoverflow.com/questions/30926278/…
  • @CrimsonChris ha true via不同的帐户哈哈。

标签: knockout.js knockout-3.0


【解决方案1】:

有一个 selectedIndex 可观察对象,可用于 css 绑定以确定是否“选中”行。

例子: http://jsfiddle.net/Lgn4ppwo/

HTML

<div data-bind="foreach: makes">
    <div data-bind="css: { selected: $index() === $root.selectedIndex() }, click: $root.select.bind($root, $index())">xx </div>
</div>

查看模型

function ViewModel() {
    this.selectedIndex = ko.observable(0);
    this.select = function(index) {
        this.selectedIndex(index);
    };
    ...
};

【讨论】:

  • 谢谢!这是工作。我还有一个问题需要将 $data 传递给函数 select。我们在 $root 中传递了什么?我看到我们正在将 2 个参数传递给 select 函数,但它期望一个是 index ...
  • @DiegoP 你应该看看bind 是如何工作的。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-28
  • 2019-05-20
相关资源
最近更新 更多