【问题标题】:Bootstrap dropdown-toggle and selection with knockout bindingBootstrap 下拉切换和带有敲除绑定的选择
【发布时间】:2016-12-31 18:20:41
【问题描述】:

我正在尝试以编程方式在按钮中选择选项以及加载页面时的下拉菜单(基于之前保存到 cookie 的选项)。

当我执行以下代码时,它只显示下拉菜单,我想执行点击事件和相关的代码/页面更改。

$(".dropdown-menu").dropdown("toggle");

我该怎么做。

    <div class="btn-group"  >
	  <button type="button" id="activeGrouping" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
		  <span data-bind="if: view()==1">No grouping</span>
		  <span data-bind="if: view()==2">Group by subject</span>
		  &nbsp;
		  <span class="caret"></span>
	  </button>
	  <ul class="dropdown-menu">
		<li><a href="#" id="groupBySubject" data-bind="click: $root.toggleView(2)">Group by subject</a></li>
		<li><a href="#" id="noGrouping" data-bind="click: $root.toggleView(1)">No grouping</a></li>
	  </ul>
</div>

【问题讨论】:

标签: twitter-bootstrap knockout.js


【解决方案1】:

在 Knockout 中,您不必摆弄 DOM。您对应用程序状态进行建模并操作模型。 Knockout 绑定负责更新 UI。

要更改选择的项目,您只需设置绑定变量 (view)。在示例中,下拉列表会从没有值开始,然后会被赋予我们想要的值。

vm = {
  view: ko.observable()
};

ko.applyBindings(vm);

// Simulating fetching from cookie and setting
setTimeout(() => vm.view(2), 500);
<link href="http://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<script src="http://netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script>
<div class="btn-group">
  <button type="button" id="activeGrouping" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
    <span data-bind="if: view()==1">No grouping</span>
    <span data-bind="if: view()==2">Group by subject</span>
    &nbsp;
    <span class="caret"></span>
  </button>
  <ul class="dropdown-menu">
    <li><a href="#" id="groupBySubject" data-bind="click: () => view(2)">Group by subject</a>
    </li>
    <li><a href="#" id="noGrouping" data-bind="click: () => view(1)">No grouping</a>
    </li>
  </ul>
</div>

【讨论】:

  • 您能否回答以下问题 1. 为什么使用语法 --> data-bind="click: () => view(2)" 和 data-bind 相比有什么优势="click: view(2)" 2. 为什么要使用 setTimeout(() => vm.view(2), 500);
  • 1.点击绑定应该接受一个函数,而不是一个 sn-p 代码。如果您使用click: view(2),它将在启动时以及每次单击时执行... 2. 我使用setTimeout,因此您可以看到从初始状态开始发生的变化。这纯粹是为了演示。
猜你喜欢
  • 2016-03-21
  • 2015-11-28
  • 2015-08-17
  • 1970-01-01
  • 2016-09-25
  • 1970-01-01
  • 2013-03-25
  • 1970-01-01
  • 2013-03-24
相关资源
最近更新 更多