首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果值为空KO,则添加"TBD“

如果值为空KO,则添加"TBD“
EN

Stack Overflow用户
提问于 2016-10-31 10:35:00
回答 3查看 154关注 0票数 0

我拥有以下KO财产:

代码语言:javascript
复制
self.property= ko.observableArray([]);

以及HTML:

代码语言:javascript
复制
<div data-bind="foreach: pvm.property, visible: pvm.property().length">
    <p data-bind="text: address"></p>
</div>

如果pvm.property为空,如何显示"TBD“值?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-10-31 10:46:53

您还没有真正解释“优雅的解决方案”是什么意思。一种方法可能是不使用visible隐藏元素,而是创建一个用于自定义样式并对空状态内容使用::after伪元素的css类。

代码语言:javascript
复制
var i = 0;
var items = ko.observableArray([]);
var add = function() {
  items.push(++i);
};

ko.applyBindings({
  items: items,
  add: add
});
代码语言:javascript
复制
.is-empty::after {
  content: "TBD";
}
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>

<div data-bind="foreach: items, css: {'is-empty': !items().length }">
    <p data-bind="text: $data"></p>
</div>

<button data-bind="click: add">add item</button>

您甚至可以在元素中定义占位符文本,并在css中保持其动态:

代码语言:javascript
复制
.is-empty::after {
  content: attr(data-placeholder);
}

在html中:

代码语言:javascript
复制
<div data-placeholder="TBD" ... ></div>

代码语言:javascript
复制
<div data-bind="attr: { 'data-placeholder': 'TBD' }"></div>

代码语言:javascript
复制
var i = 0;
var items = ko.observableArray([]);
var add = function() {
  items.push(++i);
};

ko.applyBindings({
  items: items,
  add: add
});
代码语言:javascript
复制
.is-empty::after {
  content: attr(data-placeholder);
}
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>

<div data-bind="foreach: items, 
                css: {'is-empty': !items().length },
                attr: {'data-placeholder': 'TBD' }">
    <p data-bind="text: $data"></p>
</div>

<div data-placeholder="TBD" data-bind="foreach: items, 
                css: {'is-empty': !items().length }">
    <p data-bind="text: $data"></p>
</div>



<button data-bind="click: add">add item</button>

票数 1
EN

Stack Overflow用户

发布于 2016-10-31 10:45:59

您可以在property数组有长度时显示元素,这意味着当property数组没有长度时,可以对另一个元素执行相同的操作。

代码语言:javascript
复制
<div data-bind="foreach: pvm.property, visible: pvm.property().length">
    <p data-bind="text: address"></p>
</div>
<div data-bind="visible: !pvm.property().length">TBD</div>

为了改善用户体验,您可以使用CSS隐藏其中一个(或两者),直到绑定实际运行为止。这将防止元素在页面加载和视图模型加载之间的瞬间跳跃。

票数 1
EN

Stack Overflow用户

发布于 2016-10-31 11:00:12

再来一个有TBD的可观察到的怎么样。然后像data-bind='foreach: courses().length > 0 ? courses : emptyCourses'那样的数据绑定

这是一把小提琴。https://jsfiddle.net/othkss9s/22/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40340444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档