knockout.js - Knockout js在第二次绑定后保持显示/隐藏元素
问题描述
我在 knockout.js 中有以下代码,并且在单击 div 元素时使用 javascript 我隐藏了它。但在 ajax 请求后的第二次绑定中,div 再次显示。
<div id="myrootDiv">
<!-- ko foreach: Items -->
<div class="myclass" data-bind="html: myData"></div>
<!-- /ko -->
</div>
javascript代码
$("#myrootDiv").on("click",".myclass",function (){
$(this).toggle();
});
我将如何记住每个绑定的可见性?当我打电话时
ko.mapping.fromJS(jsonData,{}, myVM);
所有 div 元素都再次显示。如何使它们不可见,依赖于用户选择。这是我的查看代码
var ViewModel = function() {};
var myVM = new ViewModel('myrootDiv');
var tempjson={"items":[{"id":"1","myData":"test data1"},{"id":"2","myData":"test data2"},{"id":"3","myData":"test data3"}]};
var jsonData =$.parseJSON(tempjson);
ko.mapping.fromJS(jsonData,{}, myVM);
ko.applyBindings(myVM,document.getElementById('myrootDiv'));
在ajax成功我做
ko.mapping.fromJS(jsonData,{}, myVM);
解决方案
不太确定第二次绑定是什么意思,但通常可以通过将 a 添加isVisible = ko.observable(true);
到 Items 数组中的各个项目,然后在 html 中有以下内容来实现您所追求的。
<!-- ko foreach: Items -->
<div data-bind="html: myData, visible: isVisible">
</div>
<!-- /ko -->
isVisibile 属性跟踪项目是否可见。在代码中的其他地方,您可以根据需要为每个项目打开或关闭可见性。
推荐阅读
- javascript - 在谷歌浏览器中自动播放
- c# - 如何仅以有效形式制作文本框数字和运算符。. .
- google-app-engine - DefaultClient 范围从 App Engine (Go) 1.9 迁移到 1.11
- html - 在每个类上使用 nth-of-type 选择元素,除了多个 div 中的第一个和最后一个
- forms - 以编程方式在 PDF 表单中创建动态表
- deep-learning - ```predictions[a > 0.5] = 1``` 和 ```acc = np.mean(predictions == y)``` 是什么意思?
- c# - 将 JWT 发送到新控制器后如何获取用户信息
- javascript - 未捕获的 TypeError:this.validateHandler 不是 Magento2.3 的函数
- android - 在片段中的 RecycleView 中实现 Searchview 时出现问题?
- popover - iOS 13 - UIPopoverPresentationController sourceview 内容在箭头中可见