knockout.js:If和foreach绑定,检查可观察数组上的真值
knockout.js: the If and foreach bindings, checking for truth value on observable array
我很难理解使用if和for每个绑定的一些细节。我希望有人能指出一些显而易见的事情
我有一个空数组,使用Boolean(observableArray().length)
得到false。这没问题。然而,我无法使这种表达式在if
绑定中工作。
如果我从一个空数组开始并向它推送数据,我就不会出现html元素。如果我从一个填充的数组开始,元素会出现,但在删除数据时会被删除,然后在添加回数据时不会重新出现(?)。
以下是解决问题的方法:https://jsfiddle.net/Robinrich/rmn7afpm/25/
这是代码:
function dataForTest(data) {
var that = this;
that.data = data;
}
function testViewModel() {
var that = this;
//Truth testing array.
that.truthTest = ko.observableArray([new dataForTest("data")]);
that.truFal = ko.observable(Boolean(that.truthTest().length));
//Data to push and remove.
var data = new dataForTest("data");
that.pushData = function() {
that.truthTest().push(data);
that.truFal(Boolean(that.truthTest().length));
}
that.removeData = function() {
that.truthTest([]);
that.truFal(Boolean(that.truthTest().length));
}
}
ko.applyBindings(new testViewModel());
这是HTML:
<h1> Testing array.length truthiness.</h1>
<button data-bind="click: pushData">Push Data</button>
<button data-bind="click: removeData">Remove Data</button>
<div data-bind="if: truthTest().length">
<p>Data exists.</p>
<ul data-bind="foreach: truthTest">
<li><span data-bind="text: data"></span></li>
</ul>
</div>
<p> There is data: <span data-bind="text: truFal()"></span>
</p>
我从一个数据实例开始,它很好。此时将显示数据。这就是我所期望的,表达式if: truthTest().length
的求值结果为true,并且元素呈现。那么,为什么在评估为false之后不重新渲染呢?我清空和添加数组是否不正确?我认为这就是问题所在,因为如果我从一个填充的数组开始并继续推送数据,<ul>
不会更新,但Boolean(truthTest().length)
的真值是。任何建议都将不胜感激。
您需要将that.truthTest().push(data);
更改为that.truthTest.push(data);
检查Fiddle
相关文章:
- knockoutjs可观察数组
- 将js对象更改为使用嵌套的可观察数组敲除js视图模型
- 敲除:可观察数组没有被正确绑定——只有1个结果显示,而api返回6
- $scope$观察数组中的一个特定对象——Angular JS控制器
- 如何使用敲除映射将空值映射到空的可观察数组
- 无法观察Ember.js中的对象数组
- 以不同的方式对相同的可观察数组进行排序
- 如何在 Knockout.js 中更新可观察数组后立即使用 DOM 容器
- Knockout.js:如何根据可观察数组中的更改更改值
- 使用挖空.js如何刷新 Select 元素中的可观察数组
- 谷歌跟踪代码管理器使用什么模式来观察 de 'dataLayer' 数组
- 更新挖空中可观察数组中项目的属性
- 动态地向可观察数组中的特定项添加绑定(例如hasfocus)
- AngularJS:观察数组属性
- 对可观察数组foreach的更新删除了格式化knockoutjs
- 当通过Ajax成功回调更新可观察数组时,启用绑定中断
- 如何获取复选框值并将其插入到挖空中的可观察数组中
- 剔除不更新辅助表的可观察数组
- 如何让Knockout可观察数组与jQuery对话框一起工作
- 更改可观察数组会更改自定义绑定处理程序knockoutjs的可见性