knockout.js、knockout可排序和默认文本
knockout.js, knockout-sortable, and default text
我使用的是knockout.js和knockout-sortable
,如果数组中没有元素传递到sortable
绑定,我目前正在尝试在sortable
父元素内部获取一些默认文本。
这与这个stackoverflow问题有关,但由于我的要求而有所不同:我不能将文本放在父元素之外。意思是:
<div data-bind="if: pets().length > 0">These are the pets:</div>
<div data-bind="if: pets().length == 0">There aren't any pets. To add a pet...</div>
<div data-bind="foreach: pets">
对我无效。文本需要包含在foreach循环内部,这样它也可以用作放置区域。我确实看过knockout-punches
库,但我还没有想出使用它的解决方案。我对纯淘汰解决方案或插件持开放态度。
我的代码目前看起来是这样的:
<div class="my-drop" data-bind="foreach: { template: 'myTemplate', data: myContainerList}"></div>
当数组为空时,您可以创建一个新的绑定或扩展foreach
以显示某些内容。下面是一个扩展foreach
的示例。
var origForeachUpdate = ko.bindingHandlers.foreach.update;
ko.bindingHandlers.foreach.update = function(element, valueAccessor) {
var options = valueAccessor();
if (options.defaultText) {
var array = ko.unwrap(options.data);
if (!array || !array.length) {
element.innerText = options.defaultText;
} else if (element.innerText == options.defaultText) {
element.innerText = "";
}
}
origForeachUpdate.apply(this, arguments);
};
http://jsfiddle.net/mbest/Z7BeM/
使用虚拟元素绑定:
<div>
<span data-bind="if: pets().length > 0">These are the pets:</span>
<span data-bind="if: pets().length == 0">There aren't any pets. To add a pet...</span>
<!-- ko foreach: pets -->
<!-- /ko -->
</div>
虚拟绑定是处理需要包含一些固定项和可变项的列表的情况的标准方法。
相关文章:
- 用嵌套函数和默认函数定义函数
- 如何使用铁流星与流星的默认路线
- 防止Alt+Shift默认操作或检测多种操作系统语言的Javascript
- CKeditor:更改对话框中的默认选择选项
- 在不阻止默认行为的情况下检测IE10中的缩放
- 如何从外部页面激活非默认引导选项卡
- 防止默认锚点行为AngularJS
- 我的shareService在angular 2中发送值工作正常,但当我渲染我的另一个组件时,会获得默认值
- jpm的默认Firefox路径没有'不起作用
- jquerydatetimepicker日期和时间应在框默认值中,而无需单击框
- 如果值为空,如何设置输入的默认值?jQuery
- 骨干模型默认值-todos.js示例中不必要的代码
- knockout.js、knockout可排序和默认文本
- 当通过AJAX绑定选项时,是否可以将select元素的默认值传递给Knockout
- 如何使用Knockout JS数组映射根据输入条件使选择选项绑定默认值
- 显示默认行KnockOut.js
- 如何在knockout js中设置dropdown的初始默认值
- 是否可以设置valueUpdate:'afterkeydown'作为Knockout.js中默认的val
- Knockout.js默认事件绑定与使用 jQuery 事件委托的自定义绑定 .on() - 性能和收益
- 如何使用Knockout向选择选项添加默认文本